C# .NET MVC-将响应设置为从属性重定向时返回的内容
我有一个属性[RedirectSSL],在某些情况下,它可能会或可能不会将http请求重定向到相应的https请求:C# .NET MVC-将响应设置为从属性重定向时返回的内容,c#,asp.net-mvc,redirect,C#,Asp.net Mvc,Redirect,我有一个属性[RedirectSSL],在某些情况下,它可能会或可能不会将http请求重定向到相应的https请求: [RedirectSSL] public class ControllerA : Controller(){ public ActionResult MethodA() { if (SomeExpression) return RedirectToAction("MethodB", "ControllerA");
[RedirectSSL]
public class ControllerA : Controller(){
public ActionResult MethodA()
{
if (SomeExpression)
return RedirectToAction("MethodB", "ControllerA");
return RedirectToAction("MethodC", "ControllerA");
}
public ActionResult MethodB()
{
return View();
}
public ActionResult MethodC()
{
return View();
}
}
此代码的问题在于,在返回RedirectToAction()之前,只要RedirectSSL属性调用响应的Redirect()方法,它就会抛出System.Web.HttpException。方法是将重定向封装在
if(!Response.IsRequestBeingRedirected){ ... }
但是,如果计算结果为false,应该返回什么?我想一个EmptyResult()就可以了,但我不喜欢代码的外观,因为我不清楚它是否会重定向客户端。有什么想法吗
提前谢谢
ActionFilter
帮助您决定是否可以执行某个操作。通过从筛选器提供ActionResult
,可以完全绕过该操作。类似于
public class RedirectSSLAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!filterContext.HttpContext.Request.IsSecureConnection)
{
filterContext.Result = new RedirectResult("your url");
return;
}
base.OnActionExecuting(filterContext);
}
}
ActionFilter
帮助您决定是否可以执行某个操作。通过从筛选器提供ActionResult
,可以完全绕过该操作。类似于
public class RedirectSSLAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!filterContext.HttpContext.Request.IsSecureConnection)
{
filterContext.Result = new RedirectResult("your url");
return;
}
base.OnActionExecuting(filterContext);
}
}
在
RedirectSSL
中调用Response.Redirect
,而不是调用Response.Redirect
,将RedirectResult
分配给filterContext.Result
。因此,它将阻止调用该操作。与其在重定向SSL
中调用响应.Redirect
,不如将重定向结果
分配给过滤器上下文.Result
。因此,它将阻止动作被调用。它像一个符咒一样工作,是一个比我希望的更好的解决方案。谢谢它就像一个魅力,是一个比我希望的更好的解决方案。谢谢