gpt4 book ai didi

asp.net - 301 重定向的正确 Controller 代码

转载 作者:行者123 更新时间:2023-12-02 10:18:26 26 4
gpt4 key购买 nike

我正在从静态网站设计一个新的动态网站。我已经对路线进行了排序,但我对我的操作方法有疑问。

下面是代码,但是在测试和查看 Firebug 报告的 header 时,如果我取出 Response.End,我假设它是 302 重定向,因为我设置了 301,但随后调用另一个操作使其成为 302,但如果我输入 Response.End 我会得到 301。

我猜测添加 Response.RedirectLocation 实际上是在执行 301 重定向,因此我是否会将返回值更改为 EmptyResult 或 null,即使该行代码永远不会被执行,以便应用程序编译?

public ActionResult MoveOld(string id)
{
string pagename = String.Empty;

if(id == "2")
{
pagename = WebPage.SingleOrDefault(x => x.ID == 5).URL;
}

Response.StatusCode = 301;
Response.StatusDescription = "301 Moved Permanently";
Response.RedirectLocation = pagename;
Response.End();

return RedirectToAction("Details", new { pageName = pagename });
}

最佳答案

我同意李维的评论。这不是 Controller 的工作。我倾向于使用 this 301 的自定义 ActionResult。以下是具有更多选项的修改版本。

对于 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");

关于asp.net - 301 重定向的正确 Controller 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1693548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com