C#MVC:如何覆盖已配置的身份validation重定向?
我在Web.config中有一个带有以下块的MVC应用程序:
因此,如果用户请求页面并且授权失败,它们将被重定向到〜/ Login。
那很好,我需要大多数控制器。 但是,我有一个控制器,我想绕过这个规则。 如何允许特定控制器忽略此规则?
我的问题是在我的MVC应用程序(有几个控制器)中,我有一个控制器,它承载一个REST接口(不适合浏览器使用)。 由于此控制器不适合浏览器使用,我不希望它发送回整个登录页面(或任何实际的页面,只是字符串或部分视图。)
请注意,我在我的操作中使用自定义[授权…]属性,当这些属性失败时,它们会重定向到错误操作 – 但不幸的是, 我的错误操作(返回一个短字符串)被重定向到登录页面因为此配置设置!
我试图弄明白这一点,头晕,我做错了什么? 如有必要,我可以提供更多细节。
您可以扩展AuthorizeAttribute类并覆盖HandleUnauthorizedRequest,您可能希望返回Forbidden http状态代码而不是自定义消息。
public class CustomAuthorizationAttribute : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { // You need to set this action result to something other than a HttpUnauthorizedResult, // this result will cause the redirection to the login page // Forbidden request... does not redirect to login page // filterContext.Result = new HttpStatusCodeResult(403); filterContext.Result = new ErrorActionResult { ErrorMessage = "Unauthorized Access" }; } } public class ErrorActionResult : ActionResult { public string ErrorMessage { get; set; } public override void ExecuteResult(ControllerContext context) { context.HttpContext.Response.Write(this.ErrorMessage); } }
在Web.config中的system.web元素之后添加以下内容:
这将允许未经身份validation的用户访问“/ home”,从而访问HomeController上的任何操作。
Phil Haack在这个确切的主题上有一篇非常详尽的博客文章: 当你不想要它时,防止表单身份validation登录页面重定向
上述就是C#学习教程:C#MVC:如何覆盖已配置的身份validation重定向?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/950773.html