ASP.NET MVC映射路由配置问题

时间:2014-02-02 20:52:34

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

我意识到在SO上有很多这样的问题但是没有一个解决方案对我有用,这可能是因为我遗漏了一些我不知道的简单问题。在我的应用程序中,我添加了一个名为 ErrorController 的控制器,其中包含一个名为 Error.cshtml 的视图。控制器如下所示:

public class ErrorController : Controller
{
    public ActionResult Index(string errorMessage)
    {
        ViewBag.Error = errorMessage;
        return View();
    }
}

现在假设我想从不同的控制器重定向到此操作。我能够使用

实现这一目标
public ActionResult DoStuff(MyModel model)
{
    return RedirectToAction("", "Error", new { errorMessage = "SomeError" });
}

调用重定向时,我注意到该参数作为查询字符串传递:

/Error?errorMessage=SomeError

我希望能够将参数作为路由值传递,因此我的网址看起来像

/Error/SomeError

所以我将以下映射添加到我的RouteConfig.cs文件中:

routes.MapRoute(
  name: "Test",
  url: "{controller}/{action}/{errorMessage}",
  defaults: new { controller = "Error", action = "Index", errorMessage = "defaultErrorMessageTest" }
);

但它不起作用。当我尝试使用类似/Error/HelloWorld的URL调用方法时,出现黄屏错误,指出无法找到资源。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我认为你在RouteConfig中的问题,这对我来说很好。

 public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Test",
            url: "Error/{errorMessage}",
            defaults: new { controller = "Error", action = "Index", errorMessage = "defaultErrorMessageTest" }
          );


        routes.MapRoute(
           name: "Defualt",
           url: "{controller}/{action}",
           defaults: new { controller = "Test", action = "DoStuff" }
         );           
    }
}
 public class ErrorController : Controller
{
    public ActionResult Index(string errorMessage)
    {
        ViewBag.Error = errorMessage;
        return View("Error");
    }     
}
 public class TestController : Controller
{
    public ActionResult DoStuff()
    {
        return RedirectToAction("Index", "Error", new { errorMessage = "SomeError" });
    }
}

答案 1 :(得分:1)

更改

return RedirectToAction("", "Error", new { errorMessage = "SomeError" });

return RedirectToAction("Index", "Error", new { errorMessage = "SomeError" });

然后将您的路线更改为:

routes.MapRoute(
    name: "Test",
    url: "error/{errorMessage}",
    defaults: new { controller = "Error", action = "Index", errorMessage = "defaultErrorMessageTest" }
);

此外,请确保此路线高于您的默认路线。