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



我意识到有很多这样的问题,但是这些解决方案似乎对我有用,这可能是因为我错过了一些简单的东西,我不知道。在我的应用程序中,我添加了一个名为 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

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

/Error/SomeError

因此,我将以下映射添加到我的RouteConfig.cs文件:

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

但行不通。当我尝试使用诸如/Error/HelloWorld之类的URL调用该方法时,我会发现一个黄色屏幕错误,说找不到资源。我在这里错过了什么吗?

更改

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

to

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

,然后将您的路线更改为:

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

另外,请确保此路线到达您的默认路线上方。

我认为您在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" });
    }
}

最新更新