Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET MVC-将响应设置为从属性重定向时返回的内容_C#_Asp.net Mvc_Redirect - Fatal编程技术网

C# .NET MVC-将响应设置为从属性重定向时返回的内容

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],在某些情况下,它可能会或可能不会将http请求重定向到相应的https请求:

[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
。因此,它将阻止动作被调用。它像一个符咒一样工作,是一个比我希望的更好的解决方案。谢谢它就像一个魅力,是一个比我希望的更好的解决方案。谢谢