Asp.net mvc 如何在MVC控制器中使用状态代码重定向到另一个URL
我想将用户重定向到另一个URL,但要附带一个状态码 以下代码执行重定向,但状态代码始终为302Asp.net mvc 如何在MVC控制器中使用状态代码重定向到另一个URL,asp.net-mvc,redirect,Asp.net Mvc,Redirect,我想将用户重定向到另一个URL,但要附带一个状态码 以下代码执行重定向,但状态代码始终为302 public ActionResult RedirectWithStatusCode(string redirectionUrl, int statusCode) { try { Response.StatusCode = statusCode; return Redirect(redirectionUrl); } c
public ActionResult RedirectWithStatusCode(string redirectionUrl, int statusCode)
{
try
{
Response.StatusCode = statusCode;
return Redirect(redirectionUrl);
}
catch (Exception ex)
{
Response.StatusCode = 404;
//log exception
return new EmptyResult();
}
}
对状态代码
301使用RedirectPermanent()
,对状态代码302使用Redirect()
有一些变体,如RedirectToAction()
,RedirectToActionPermanent()
,RedirectToRoute()
和RedirectToRoutePermanent()
,遵循相同的原则
编辑:
回答您的问题时,如果您想在较低级别上操纵响应,请尝试以下操作:
public void RedirectWithStatusCode(string redirectionUrl, int statusCode)
{
try
{
Response.StatusCode = statusCode;
Response.Headers["Location"] = redirectionUrl;
Response.End();
}
catch (Exception ex)
{
Response.StatusCode = 404;
//log exception
Response.End();
}
}
测试URL:/redirectwithstatuscode?状态代码=308&redirectionurl=http://google.com
警告:您可能需要确保传递的URL属于您的域,否则您可能会使您的网站受到重定向攻击。但是有没有办法配置状态代码或将其作为参数发送,如所述,这是一种ActionResult方法,而不是void。那么,返回类型应该是什么呢?您正在终止函数体中的响应,因此不需要返回任何内容。Void是有效的,但是如果对您有效的话,我建议您坚持使用内置的Redirect和RedirectPermanent方法。