您现在的位置是:首页 >技术教程 >1— .Net MVC之控制器网站首页技术教程

1— .Net MVC之控制器

风的艺术 2024-06-14 17:17:56
简介1— .Net MVC之控制器

在上下文中使用的控制器

问题

答案

什么是控制器?

控制器包含用于接收请求、更新应用程序状态或模型以及选择将发送给客户端的响应的逻辑

控制器有什么用?

控制器是MVC项目的核心,并包含Web应用程序的逻辑

如何使用控制器?

控制器是调用公共方法来处理HTTP请求的C#类。这些方法可以负责直接为客户生成响应但更常见的方式是返回操作结果,告诉MVC应该如何去响应

使用控制器是否有一些隐患或局限性?

刚开始使用MVC时,可以轻松创建包含更适合于模型或视图功能的控制器。一个更为具体的问题是任何以Controller为名的公共类都会被假定为MVC的控制器,这意味着一些可能不是作为控制器的类被意外用于处理HTTP请求

是否有其他的替代选择?

没有,控制器是MVC应用程序的核心部分

 

控制器的定义

控制器的定义:名称以Controller结尾的任何公共类都是控制器

public class PocoController

{

public string Index() => "This is a POCO Controller";

}

PocoController满足了MVC控制器的基础标准,POCO表示“普通的CLR对象”,并指的是使用标准的.Net功能实现控制器,而不是直接依赖于ASP.Net Core MVC 提供的API

 

使用控制器基类

public class DerivedController : Controller

{

    public IActionResult Index()

    {

        return View("Result",$"这是Derived控制器");

    }

}

Controller基类主要优点是可以方便地访问当前请求。

用于上下文数据一些有用的控制器类属性

属性

描述

Request

返回一个HttpRequest对象,用于描述从客户端收到的请求

Response

返回用于创建客户端响应的HttpResponse 对象

HttpContext

返回一个HttpContext对象,它是由其他属性(如请求和响应)返回的许多对象的源,它还提供了有关可用的HTTP功能的信息以及对低级功能(如Web套接字)的访问

RouteData

返回由路由系统在匹配请求时生成的RouteData对象

ModelState

返回一个ModelStateDictionary对象,用于验证客户端发送的数据

 User

返回一个ClaimsPrincipal对象,用于描述已发出请求的用户

使用Controller.Request属性会返回一个HttpRequest对象,以下描述了编写控制器时有用的HttpRequest属性

有用的HttpRequest

属性

描述

Path

返回请求URL的路径部分

QueryString

返回请求URL的查询字符串部分

Headers

返回按名称索引的请求标题的字典

Body

返回可用于读取请求正文的流

Form

返回请求中表单数据的字典(按名称索引)

Cookies

返回按名称索引的请求cookie的字典

 

在POPC控制器里自定义视图

public class PocoController

{

    [ControllerContext]

    public ControllerContext ControllerContext { get; set; }

    public ViewResult Headers()

    {

        var viewResult = new ViewResult()

        {

            ViewName = "DictonaryResult",

            ViewData = new Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary(

                    new EmptyModelMetadataProvider(),

                    new ModelStateDictionary())

            {

                Model = ControllerContext.HttpContext.

                    Request.Headers.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.First())

            }

        };

        return viewResult;

    }

}

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。