asp.net core学习笔记——Controller

控制器

这一系列笔记都基于视频:视频地址

  • 一个类以Controller结尾,或者加上[Controller](不用以Controller结尾)标注的类就被识别为一个控制器
  • 一个控制器一般都会继承一个Controller类,在Controller类中有许多对象,可以方便我们操作
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
    public class TestController : Controller
    {
        public IActionResult Index()
        {
            return Content("hello world!");
        }
    }
}
利用Controller中自带对象获取数据
  • Controller类里面自带Request对象,用来获取请求参数,包括Session、Cookies等
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
    public class TestController : Controller
    {
        public IActionResult Index()
        {
            // 表单
            var value1 = Request.Form["value1"];
            // 请求参数
            var value2 = Request.Query["value2"];
            // 获取Cookies
            var value3 = Request.Cookies["value3"];
            // 获取Session对象
            var session = HttpContext.Session;
            // 对session的操作
            session.SetString("name", "value");
            var name = session.GetString("name");
            session.Remove("name");
            return Content("hello world!");
        }
    }
}
  • Session的其他方法:
namespace Microsoft.AspNetCore.Http
{
    public static class SessionExtensions
    {
        public static byte[] Get(this ISession session, string key);
        public static int? GetInt32(this ISession session, string key);
        public static string GetString(this ISession session, string key);
        public static void SetInt32(this ISession session, string key, int value);
        public static void SetString(this ISession session, string key, string value);
    }
}
数据绑定
  • 将要传递的参数绑定到方法参数上
    • 函数参数名必须和传递过来的参数名字相同
    • 可以是简单类型也可以是自定义类型(类)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
    public class TestController : Controller
    {
        public IActionResult Index(string name,int age)
        {
            return Content($"name:{name} age:{age}");
            //name: zhangsan age:18
        }
    }
}

注意

  • 如果一个类以Controller结尾,但是不把他当做一个控制器的话,就在类上面加上[NonController]标注

  • 同一个数据出现在多种数据源的话,可以在参数上面加上特性,例如:

using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
    public class TestController : Controller
    {
        // 丛查询字符串中获取
        public IActionResult Index( [FromQuery] string name)
        {
            return Content(name);
        }
    }
}
  • 并不是所有的数据都会自动绑定,所以有些需要绑定的数据要加上特性才能绑定

ActionResult

  • 动作结果接口,具体实现有:
    • JsonResult:返回JSON结构数据,封装方法为Json(Object)
    • RedirectResult:跳转到新地址,封装方法为Redirect(Url)
    • FileResult:返回文件,封装方法为File()
    • ViewResult:返回视图页面,封装方法为View()
    • ContentResult:文本内容,封装方法为Content("")

例如:

请求:https://localhost:5001/Test/returnjson1

返回:{“username”:“zhangsan”,“age”:18}

请求:https://localhost:5001/Test/returnjson2

返回:{“username”:“xiaoming”,“age”:18}

using Microsoft.AspNetCore.Mvc;
namespace WebApplication1.Controllers
{
    public class TestController : Controller
    {
        public IActionResult ReturnJson1()
        {
            var jsonResult = new JsonResult(new { username = "zhangsan", age = 18 });
            return jsonResult;
        }
        public IActionResult ReturnJson2()
        {
            return Json(new { username = "xiaoming", age = 18 });
        }
    }
}
  • 返回视图的时候默认会从项目中的Views文件夹下的Controller名称对应的文件夹下寻找视图,例如请求下面的控制器就会返回ShowView视图:
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
    public class TestController : Controller
    {
        // 在项目的Views目录下,新建一个Test目录,在Test目录下新建一个视图`ShowView.cshtml`
        public IActionResult ShowView()
        {
            return View();
        }
    }
}
  • 返回指定视图
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
    public class TestController : Controller
    {
        // 在项目的Views目录下,新建一个Test目录,在Test目录下新建一个视图`AnotherView.cshtml`
        public IActionResult ShowView()
        {
            return View("/Views/Test/AnotherView.cshtml");
        }
    }
}
  • 注意在程序中如果有IO操作的话,使用Task<IActionResult>作为函数的返回值可以提高程序性能。
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
    public class TestController : Controller
    {
        public async Task<IActionResult> Index()
        {
            return View("/Views/Test/AnotherView.cshtml");
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值