Asp.net mvc Asp.NETMVC路由约束是否可以引发404而不是InvalidOperationException?
我试图在Asp.NETMVC应用程序中使用路由约束Asp.net mvc Asp.NETMVC路由约束是否可以引发404而不是InvalidOperationException?,asp.net-mvc,routing,asp.net-mvc-routing,http-status-code-404,Asp.net Mvc,Routing,Asp.net Mvc Routing,Http Status Code 404,我试图在Asp.NETMVC应用程序中使用路由约束 routes.MapRoute( "theRoute", "MyAction/{page}", new { controller = "TheController", action = "MyAction", page = 1 }, new { page = @"[0-9]" }); 当我输入像~/MyAction/aString这样的url时,会显示一个YSOD,其中包含一个无效的操作异常。如何将无效url重
routes.MapRoute(
"theRoute",
"MyAction/{page}",
new { controller = "TheController", action = "MyAction", page = 1 },
new { page = @"[0-9]" });
当我输入像~/MyAction/aString这样的url时,会显示一个YSOD,其中包含一个无效的操作异常。如何将无效url重定向到404页面
我知道我可以在控制器操作和int.TryParse中使用一个字符串参数来解决这个问题,但是路由约束是无用的
如何选择路由约束引发的exceptiontype?问题是您没有与以字符串结尾的路由匹配的路由 修改路线,类似于:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = 0 },
new { id = "[0-9]" }// Parameter defaults
);
routes.MapRoute(
"Default2", // Route name
"{controller}/{action2}/{sid}", // URL with parameters
new { controller = "Home", action = "Index2", sid = "" } // Parameter defaults
);
并修改控制器
public ActionResult Index(int id)
{
ViewData["Title"] = "Home Page";
ViewData["Message"] = "Welcome to ASP.NET MVC! Your id is: "+ id.ToString();
return View();
}
public ActionResult Index2(string sid)
{
ViewData["Title"] = "Home Page 2."+sid.ToString();
ViewData["Message"] = "Welcome to ASP.NET MVC! \"" + sid.ToString() +"\" is an invalid id";
return View("index");
}
现在,当您为ID传递一个字符串时,将调用Index2,您可以执行任何需要执行的操作来处理错误的参数。仅提及一个更通用的重定向: 您可以在应用程序的Web.config中编写:
<system.web>
...
...
<customErrors mode="On">
<error
statusCode="404"
redirect="/Home/MyCustomError" />
<!-- Is not necessary that the
view MyCustomError.aspx are inside the
Home folder, you can put that
view in the Shared folder.
-->
</customErrors>
...
...
</system.web>
然后,您可以创建自定义错误页:
<%@ Page Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %>
<asp:Content ID="errorTitle" ContentPlaceHolderID="TitleContent" runat="server">
Error
</asp:Content>
<asp:Content ID="errorContent" ContentPlaceHolderID="MainContent" runat="server">
<h2>Shit happends</h2>
<p> <%: ViewData["messageError"]%></p>
<p>aaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!!</p>
</asp:Content>
错误
大便发生了
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
<%@ Page Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %>
<asp:Content ID="errorTitle" ContentPlaceHolderID="TitleContent" runat="server">
Error
</asp:Content>
<asp:Content ID="errorContent" ContentPlaceHolderID="MainContent" runat="server">
<h2>Shit happends</h2>
<p> <%: ViewData["messageError"]%></p>
<p>aaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!!</p>
</asp:Content>