【问题标题】:Redirect to home/index when 404404 时重定向到主页/索引
【发布时间】:2015-10-02 17:01:56
【问题描述】:

我正在使用 .NET Framework 4.5.1 和 C# 开发一个 ASP.NET MVC 5 应用程序。

当用户尝试访问不存在的资源时,我想重定向到主页/索引。

是的,有很多关于如何解决这个问题的问题。我阅读了它们,但它们的解决方案对我不起作用。

现在,我正在 web.config 上尝试这个:

<system.webServer>
    <httpErrors>
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" path="~/Home/Index" responseMode="Redirect" /> 
    </httpErrors>
</system.webServer>

但是,当我尝试访问此 URL http://host01/Views/ConnectBatch/Create.cshtml 时,我得到了默认的 404 页面。

也许问题出在path="~/Home/Index",但我尝试使用path="~/" 并得到相同的默认404 页面。

有什么想法吗?

【问题讨论】:

  • 错误过滤器...全局过滤器。那种东西
  • 只是为了消除显而易见的问题:您使用的是 IIS/IIS Express,而不是 Cassini?
  • 我也很惊讶你得到的是 404 而不是 403;在 ASP.NET MVC 项目中,默认情况下应该禁止目录浏览。

标签: c# asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

你可以试试 ~/ 或 ~/home/index.或者很可能会更改视图文件夹中的 web.config

更新 或者也许this answer 是要走的路,当我读到你的问题时,我的第一直觉是处理程序

【讨论】:

  • 感谢您的回答。我都试过了,我得到了相同的 404 默认页面。我已根据您的建议更新了我的问题。
【解决方案2】:

stackoverflow 中有很多线程,但我的情况是 ..working this

<customErrors mode="On" >
       <error statusCode="404" redirect="/404.shtml" />
</customErrors>

原始Thread

或者

你应该像这样处理代码背后的错误 (global.asax)

public class MvcApplication : HttpApplication
{
    protected void Application_EndRequest()
    {
        if (Context.Response.StatusCode == 404)
        {
            Response.Clear();

            var routedata= new RouteData();
            routedata.DataTokens["area"] = "ErrorArea"; // In case controller is in another area
            routedata.Values["controller"] = "Errors";
            routedata.Values["action"] = "NotFound";

            IController c = new ErrorsController();
            c.Execute(new RequestContext(new HttpContextWrapper(Context), routedata));
        }
    }
}

在你的错误控制器中像这样

public sealed class ErrorsController : Controller
{
    public ActionResult NotFound()
    {
        ActionResult result;

        object model = Request.Url.PathAndQuery;

        if (!Request.IsAjaxRequest())
            result = View(model);
        else
         return RedirectToAction("Index", "HomeController");
    }
}

原始Thread

【讨论】:

    【解决方案3】:

    你可以尝试使用:

    <httpErrors existingResponse="PassThrough" />
    

    来自: ASP.NET MVC 404 handling and IIS7 <httpErrors>

    我的帮助:

    ASP.NET MVC 404 Error Handling

    【讨论】:

      【解决方案4】:

      试试这个,使用 Session 变量... 资源可用时初始化 Session 变量

      例如:

      Session["user_name"] = resource.name;
      

      在页面加载函数中检查这个变量

      if(Session["user_name"] == null)
        Respon.Redirect("login.aspx");
      

      【讨论】:

        【解决方案5】:

        这就是我解决问题的方法。也许其他答案可以解决它,但我已经测试了其中一些(我已经对我测试过的答案添加了评论,说那个答案对我不起作用)。

        我已经在Web.config 里面的&lt;system.web&gt; 中添加了这个:

        <customErrors mode="On" redirectMode="ResponseRedirect">
            <error statusCode="404" redirect="~/"/>
        </customErrors>
        

        当用户找不到资源时,我想重定向到 /Home/Index。

        【讨论】:

        • 我认为这应该是答案,因为它实际上回答了问题,而不是引发关于可用性的辩论。
        猜你喜欢
        • 2011-07-11
        • 2019-08-06
        • 1970-01-01
        • 2019-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 1970-01-01
        相关资源
        最近更新 更多