ChildActionOnlyAttribute public sealed class ChildActionOnlyAttribute : FilterAttribute, IAuthorizationFilter 指示操作方法只能作为子操作进行调用...,使用新名称作为路由参数,方可路由到该操作 例: [ActionName("AboutName")] public ActionResult About() { ...... } 11)NonActionAttribute...2)将结果赋给控制器属性并在View中使用这些属性。...public abstract class ControllerBase : IController 类中有三个属性ViewData、ViewBag、TempData,使用着三个属性向视图传递数据。...注意如果控制器使用HttpPost特性修饰,而客户端发起的是get请求,也会认为是无法找到操作。
首先我们要理解一下筛选器 筛选器的由来及用途 有时,您需要在调用操作方法之前或运行操作方法之后执行逻辑。 为了对此提供支持,ASP.NET MVC 提供了筛选器。...这些筛选器用于实现 IAuthorizationFilter 和做出关于是否执行操作方法(如执行身份验证或验证请求的属性)的安全决策。...{ get; set; },其中ActionName是自定义Action的名称,比如在Create中直接[SupportFilter]那么ActionName取得就是Create,这将和你的数据库操作码进行对应的...,那么我的方法是CreateAttr,那么要使用Create这个操作码,怎么办 那么就是 [SupportFilter(ActionName = "Create")] public ActionResult...如果你没有读懂,那么代码敲一遍,那么你也就差不多知道了 代码进行了大量的注释,还不懂那么留言。
第1部分-使用Serilog RequestLogging减少日志详细程度 第2部分-使用Serilog记录所选的终结点属性 第3部分-使用Serilog.AspNetCore记录MVC属性(本文) 第...其他属性,例如MVC特定的功能,像操作方法ID,RazorPages处理程序名称或ModelValidationState,仅在MVC上下文中可用,因此Serilog的中间件不能直接访问。...使用自定义过滤器记录MVC属性 过滤器相当于为每个请求运行的类似于MVC的微型中间件管道。....Action过滤器在执行MVC操作方法之前和之后运行。他们可以访问许多MVC属性的值,例如正在执行的Action及其将被调用的参数。 下面的Action过滤器直接实现IActionFilter。...有了这个配置之后,如果你调用一个MVC控制器,你在Serilog的请求日志消息中会看到额外的数据(ActionName,ActionId,和RouteData,ValidationState)记录: ?
异常处理Action方法默认采用“On{Action}Error”这样的命名规则,而当前上下文会与异常处理操作方法的参数进行绑定。...除次之外,我们会设置当前ModelState的错误信息; 如果用户不曾定义相应的异常处理Action,依然采用“错误页面重定向”方式进行异常处理。...:如果用户名不是“Foo”则抛出InvalidUserNameException异常;如果密码不是“password”则抛出UserNamePasswordNotMatchException异常。...我们专门针对SignIn操作方法抛出的InvalidUserNameException和UserNamePasswordNotMatchException进行了处理,而ErrorMessageSettingHandler...属性ExceptionPolicy是一个基于指定的异常策略名称创建的ExceptionPolicyImpl 对象,用于针对EntLib进行的异常处理。
在本文中,我将展示如何向Serilog的摘要请求日志中添加其他元数据,例如请求的主机名,响应的内容类型或从ASP.NET Core 3.0中使用的终结点路由中间件所选择的端点名称。...本文中使用的所有日志图片均来自一款优秀的为结构化日志提供可视化界面的工具-Seq 显然,原始的日志集更加冗长,并且其中大部分不是特别有用的信息。...但是,如果您将原始的10条日志作为一个整体来看,则与Serilog摘要日志相比,它们确实会在结构日志模板中记录一些其他属性。...但是MVC的相关属性是个例外,它们是MVC中间件“内部”的特性,例如action 名称或RazorPage处理程序名称。在下一篇文章中,我将展示如何将它们添加到Serilog请求日志中。...这些属性将作为附加属性添加到Serilog生成的结构化日志中。在下一篇文章中,我将展示如何将MVC特定的属性值添加到请求日志中。敬请期待吧!
如果使用GET 请求执行删除操作(或者执行编辑操作,创建操作或者更改数据的任何其它操作) 开辟了一个安全漏洞。...一是使用不同的方法名称。这是框架代码在前面的示例中所使用的方法。...然而,这就带来了一个小问题: ASP.NET 将部分的 URL按名称映射到操作方法,如果您重命名了方法,通常Routing将无法找到该方法。...解决方法是您在示例中看到的,将ActionName("Delete")属性添加到DeleteConfirmed 方法。...不论是本节所介绍的知识,还是 Tom Dykstra's 的中级教程都是为了帮助大家更好的进行MVC的开发,大家在进行开发的同时也可以借助一些开发工具。
如果在构造UrlHelper的时候没有指定RouteCollection对象,那么通过RouteTable的静态属性Routes表示的全局路有表将直接被使用。...如果我们没有显示地指定Controller的名称(controllerName参数),那么当前Controller的名称被采用。...,后者则只是使用通过RouteTable的Routes静态属性表示的全局路由表。...如果没有指定主机名称,我们采用当前请求的主机名称,并且使用当前的端口;如果没有指定传输协议,则直接使用“http”。...RouteUrl方法来说,它还是利用整个路由表进行URL的生成,如果显示指定了路由对象的注册名称,那么就会从路由表中获取相应的路由对象,如果该路由对象与指定的变量列表不匹配,则返回Null;否则返回生成的
如果使用GET 请求执行删除操作(或者执行编辑操作,创建操作或者更改数据的任何其它操作) 开辟了一个安全漏洞。...一是使用不同的方法名称。这是框架代码在前面的示例中所使用的方法。...然而,这就带来了一个小问题: ASP.NET 将部分的 URL按名称映射到操作方法,如果您重命名了方法,通常Routing将无法找到该方法。...解决方法是您在示例中看到的,将ActionName("Delete")属性添加到DeleteConfirmed 方法。...以上的查询详细信息和删除记录示例是为了帮助大家更好的掌握MVC的知识,在进行MVC开发时,使用开发工具也可以大大提高工作效率。
Step1:添加控制器 右键点击解决方案管理器中的Controllers,单击MVC 5控制器 - 空,然后单击“添加”。名称填写为HelloController。 ?...ASP.NET MVC会调用不同的控制器类(和其内部不同的操作方法)这取决于传入URL。 所使用的ASP.NET MVC的默认URL路由逻辑使用这样的格式来判定哪些代码以便调用。...在RouteConfig.cs中,定义路由规则的格式如下: /[Controller]/[ActionName]/[Parameters] 路由的组成 如果应用程序并没有提供任何URL段的,默认为“Home...如果没 有明确的指定操作方法,Index方法会默认的被控制器类调用。 第三部分的URL段(Parameters参数)是路由数据。...默认的MVC映射为 /[Controller]/[ActionName]/[Parameters] 对于这个URL,控制器类是Hello,操作方法是Welcome,目前还没有使用过URL的[Parameters
如下面的代码片断所示,ControllerDescriptor具有三个属性,其中ControllerName和ControllerType分别表示Controller的名称和类型,前者来源于路由信息;字符串类型的...如下面的代码片断所示,表示Controller类型的ControllerType属性在构造函数中指定。...当我们调用FindAction方法根据Action名称获取对应ActionDescriptor的时候,在默情况下会将方法名称视为Action名称进行匹配。...名称的Action方法,则返回Null,而最终会导致一个状态码为404的HttpException异常的抛出;如果具有多个匹配的Action方法,则直接抛出AmbiguousMatchException...在根据指定的Action名称对方法成员进行匹配的时候会自动忽略掉方法名称的“Async”和“Completed”后缀。
然后将这个对象添加到通过routeValues表示的原始的RouteValueDictionary对象中,对应的Key就是ChildActionValueProvider的静态属性_childActionValuesKey...在进行遍历过程中,如果ValueProviderResult对象的RawValue属性是一个DictionaryValueProvider对象,则调用其GetValue方法得到Key分别为...如果所有ValueProvider的GetValue方法均返回Null,则ValueProviderCollection的GetValue方法也为Null。...也就是说,ValueProvider在集合中的先后次序决定了其使用优先级。...如果有任何一个ValueProvider的ContainsPrefix方法返回True,则ValueProviderCollection的ContainsPrefix也返回True。
如果你熟悉Asp.Net MVC,Web API的路由与Asp.Net MVC的路由是非常类似的。这主要的区别就是Web API使用的是HTTP方法,而不是URI路径来选择Action。...你也可以在Web API中使用MVC风格的路由。本文不需要有任何Asp.Net MVC的基础。...HTTP方法 替代使用HTTP方法的命名约定,你可以明确的为一个Action指定HTTP方法,通过以HttpGet、HttpPost、HttpPut或者HttpDelete属性来对Action方法进行修饰...采用这种风格的路由,需要使用注解属性来指明所允许的HTTP方法。...这种风格的路由类似于Asp.Net MVC,而且可能与RPC式的API相接近。(RPC风格不太懂,还没查资料) 你也可以通过使用ActionName注解属性来覆盖动作名。
GetControllerDescriptor( ControllerContext controllerContext); 11: } 我们所有要了解的是在默认情况下(没有对Controller类型的ActionInvoker属性进行显式设置...将ActionInvoker属性的类型名称呈现出来。...这个实例演示告诉我们:当我们需要使用到自定义的ActionInvoker的时候,可以通过自定义DependencyResolver以IoC的方式提供具体的ActionInvoker实例。...如果Action方法名称包含“Async”后缀,并且存在一个对应的以“Completed”后缀的方法,则对应的ActionDescriptor是一个ReflectedAsyncActionDescriptor...我们通过Visual Studio的ASP.NET MVC项目模板创建一个空Web应用,并创建一个默认的HomeController,然后对其进行如下的修改。
如果将表示代码和业务逻辑组合在单个对象中,则每次更改用户界面时都必须修改包含业务逻辑的对象。 这常常会引发错误,并且需要在每次进行细微的用户界面更改后重新测试业务逻辑。...; 借助属性路由,可以通过用定义应用程序路由的属性修饰控制器和操作来指定路由信息。 这意味着路由定义位于与之相关联的控制器和操作旁。...通过使用数据注释验证属性修饰模型对象来支持验证。...验证属性在值发布到服务器前在客户端上进行检查,并在调用控制器操作前在服务器上进行检查。...标记帮助程序使用 C# 创建,基于元素名称、属性名称或父标记以 HTML 元素为目标。
string actionName = "index"; // 获取Action名称 if (!...string actionName = "index"; // 获取Action名称 if (!...解析URL当然也在这里进行,我们要做的就是将用户输入的类似于MVC形式的URL:http://www.xxx.com/home/index 进行正确的解析,将该请求交由HomeController进行处理...// 获得当前请求的参数数组 var paraArray = executePath.Substring(2).Split('/'); // 如果没有参数则执行默认配置...var executePath = Request.AppRelativeCurrentExecutionFilePath;//// 获得当前请求的参数数组 // 如果没有参数则执行默认配置
模拟框架采用真实MVC框架的设计和实现原理,但是会在各个环节进行最大限度地简化。我们希望读者朋友们通过这个模拟框架对MVC框架的设计与实现具有一个总体的认识。源代码从这里下载。...)上没有标注任何路由特性,它对应的路由终结点将采用这个约定路由来创建,具体的路由模板将使用真正的Controller和Action名称(“Foo/Bar/{id?}”)。...如果没有标注这样的特性,意味着可能会采用约定路由,所以我们需要将当前Controller和Action名称填充到RouteValues属性表示的”必需路由参数值字典”中。...约定路由可以直接通过调用AddRoute方法进行注册,由于该方法使用自增的_order字段作为注册路由的Order属性,所以先注册的路由具有更高的选择优先级。...task : Task.CompletedTask; } } 如果Controller实例对应的类型派生于抽象基类Controller,我们会对它的ActionContext属性进行设置。
弱类型: 1.使用HTML辅助方法输出超链接 (1)在View中输出ASP.NET MVC的超链接通常会用Html.ActionLink辅助方法,该方法用于产生文字链接,其文字部分会自动进行HTML编码...请注意:由于HTML标签里在套用CSS样式类型时会用到class属性名称,而在C#里class属于关键字,所以必须使用@class的方式,才能确保C#正确编译。...此外,如果要输出HTML属性包括减号(-)时,例如data-value属性,应使用“_”下划线代替。...@Html.ActionLink("链接文字","ActionName","ControllerName", null,new{@class="btnLink"}) 5个参数 使用Html.AcionLink...2.使用Html方法辅助生成表单 强类型:属于强类型的辅助方法命名方式皆为“原先的名称最后加上For” 更多转自:http://www.cnblogs.com/yytesting/p/4987633.html
目标Controller和Action的名称包含在HTTP请求中,而ASP.NET MVC的首要任务就是通过当前HTTP请求的解析得到正确的Controller和Action的名称。...表示Controller和Action名称的同名属性直接从Values字典中提取,对应的Key分别为controller和action。...在实现的GetRouteData方法中,通过HttpContextBase获取相对请求地址,如果该地址与定义在模板中的URL模式相匹配则创建一个RouteData返回;否则返回Null。...对于返回的RouteData对象,其Values属性表示的字典包含直接通过地址解析出来的变量,而对于DataTokens字典和RouteHandler属性,则直接取自Route对象的同名属性。...三、UrlRoutingModule 路由表的目的在于对当前的HTTP请求进行解析从而获取一个以Controller和Action名称为核心的路由数据,即上面介绍的RouteData,而整个解析工作是通过一个类型为
基本规则 1)变量 @后直接变量即可 2)代码块 为使用表达式或多行代码,@后跟大括号将多行代码包括在大括号中 3)“+” 对于加号连接的两个字符串变量或属性,使用小括号将他们括起来 4)插入HTML或文字...actionName:操作名称 controllerName:控制器名称 protocol:URL 协议,如“http”或“https”。...视图名称可以是控制器操作方法名称也可以不是,若不是控制器操作方法名称,控制器返回视图时要指定视图名。...2)使用html帮助方法 使用Html.Partial直接调用部分视图而不是通过控制器操作方法。...Scott Allen,孙远帅/邹权译 ASP.NET MVC4 高级编程(第四版) 3.黄保翕,ASP.NET MVC4开发指南 4.蒋金楠,ASP.NET MVC4框架揭秘 5.https://www.asp.net
); 4: } ControllerContext类型在真正的ASP.NET MVC框架中要负责一些,在这里我们对它进行了简化,仅仅将它表示成对当前Controller和请求上下文的封装,而这两个要素分别通过如下所示的...由于Action方法具有相应的参数,在执行Action方法之前必须进行参数的绑定。ASP.NET MVC将这个机制成为Model的绑定,而这又涉及到另一个重要的组件ModelBinder。...如果参数类型为字符串或者简单的值类型,我们直接根据参数名称和Key进行匹配;对于复杂类型(比如之前例子中定义的包含Contrller和Action名称的数据类型SimpleModel),则通过反射根据类型创建新的对象并根据属性名称与...Key的匹配关系对相应的属性进行赋值。...然后遍历MethodInfo的参数列表,对于每一个ParameterInfo对象,我们将它的Name和ParameterType属性表示的参数名称和类型连同创建ControllerContext作为参数调用
领取专属 10元无门槛券
手把手带您无忧上云