Используйте Testivus. Все, что необходимо знать, тут же:)
Я повторяю комментарии Леви. Это не задача контроллера. Я обычно использовал этот пользовательский ActionResult для 301. Ниже представлена модифицированная версия с дополнительными параметрами.
Для ASP.NET MVC v2 + используйте RedirectResult
.
public class PermanentRedirectResult : ActionResult
{
public string Url { get; set; }
public PermanentRedirectResult(string url)
{
Url = url;
}
public PermanentRedirectResult(RequestContext context, string actionName, string controllerName)
{
UrlHelper urlHelper = new UrlHelper(context);
string url = urlHelper.Action(actionName, controllerName);
Url = url;
}
public PermanentRedirectResult(RequestContext context, string actionName, string controllerName, object values)
{
UrlHelper urlHelper = new UrlHelper(context);
string url = urlHelper.Action(actionName, controllerName, values);
Url = url;
}
public PermanentRedirectResult(RequestContext context, string actionName, string controllerName, RouteValueDictionary values)
{
UrlHelper urlHelper = new UrlHelper(context);
string url = urlHelper.Action(actionName, controllerName, values);
Url = url;
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
context.HttpContext.Response.StatusCode = 301;
context.HttpContext.Response.RedirectLocation = Url;
context.HttpContext.Response.End();
}
}
Использование в действии
//Just passing a url that is already known
return new PermanentRedirectResult(url);
//*or*
//Redirect to a different controller/action
return new PermanentRedirectResult(ControllerContext.RequestContext, "ActionName", "ControllerName");
Контроллер не должен отвечать за установку 301 и расположение перенаправления. Эта логика должна быть инкапсулирована в ActionResult, и контроллер должен возвращать экземпляр этого ActionResult. Помните, что метод Response.End () не возвращает (генерирует исключение); следующие за ним строки не будут выполняться.
Не могли бы вы использовать настраиваемый IRouteHandler, как указано в этом сообщении в блоге?