在ASP.Net MVC中,是否可以使用Redirect
或RedirectToAction
来调用例如303错误?ASP.Net MVC - HTTP状态代码(即303,401,404等)
我正在通过一本名为“ASP.NET MVC 1.0网站编程”的书,源代码正在调用如return this.Redirect(303, FormsAuthentication.DefaultUrl);
这样的调用,但这个调用只与外部库函数有关,我希望具有相同的功能sans如果可能的话,附加组件。
在ASP.Net MVC中,是否可以使用Redirect
或RedirectToAction
来调用例如303错误?ASP.Net MVC - HTTP状态代码(即303,401,404等)
我正在通过一本名为“ASP.NET MVC 1.0网站编程”的书,源代码正在调用如return this.Redirect(303, FormsAuthentication.DefaultUrl);
这样的调用,但这个调用只与外部库函数有关,我希望具有相同的功能sans如果可能的话,附加组件。
您可以创建自定义的ActionResults,以模拟任何您想要的http响应代码。通过返回这些行动结果,您可以轻松地执行一个303.
我发现this quick write-up,您应该能够轻松关注。
你也可以使用自定义ActionFilter来完成它,比如我提到的here。我对ActionFilter更像ActionResult。
2板上钉钉这个 -
Response.Redirect(url, false); //status at this point is 302
Response.StatusCode = 303;
- 或 -
Response.RedirectLocation = url;
Response.StatusCode = 303;
注意的是,在第一重定向,即false参数避免threadAbort异常重定向(URL)通常会抛出。这是使用这两种方法之一的一个很好的理由。
这就是我想出了基于当前的答案和反编译代码System.Web.Mvc.RedirectResult
给出的建议是:
public class SeeOtherRedirectResult : ActionResult
{
public string Url { get; private set; }
public HttpStatusCode StatusCode { get; private set; }
public SeeOtherRedirectResult(string url, HttpStatusCode statusCode)
{
if (String.IsNullOrEmpty(url))
{
throw new ArgumentException("URL can't be null or empty");
}
if ((int) statusCode < 300 || (int) statusCode > 399)
{
throw new ArgumentOutOfRangeException("statusCode",
"Redirection status code must be in the 3xx range");
}
Url = url;
StatusCode = statusCode;
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
if (context.IsChildAction)
{
throw new InvalidOperationException("Cannot redirect in child action");
}
context.Controller.TempData.Keep();
context.HttpContext.Response.StatusCode = (int) StatusCode;
context.HttpContext.Response.RedirectLocation =
UrlHelper.GenerateContentUrl(Url, context.HttpContext);
}
}
太谢谢你了!我还在Phil Haack的网站上发现了这篇文章,以防将来有人发现这一点:http://haacked.com/archive/2008/12/15/redirect-routes-and-other-fun-with-routing-and -lambdas.aspx – mynameiscoffey 2009-12-30 08:13:05
john-sheehan.com链接现在回到需要登录的Tumblr页面。原始可以在这里找到:http://johnsheehan.me/blog/another-asp-net-mvc-custom-actionresult-example/ – 2012-07-04 18:35:32
现在johnsheehan.me不解决,john-sheehan.com链接是404。编辑有archive.org页面。这就是为什么提供嵌入/引用答案而不仅仅是链接的原因。 – gregmac 2015-04-29 19:16:58