我有这条路线:
routes.MapRoute(
"PlaceDetails",
"{controller}/{action}/{id}",
new { controller = "Place", action = "Details", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
这路由很好:mysite.com/place/details/123
使Id 123可用于场所控制器的详细操作 - 然后可以查找位置'123'.
但是 - 此URL也会传递给控制器:mysite.com/place/details/
我希望它返回HttpNotFound- 但它向控制器发送一个空的Id - 并要求我处理它.
如果路由本身实现了这一点,而不是在控制器本身中需要不合理的空检查,那似乎更整洁.
我在谷歌没有发现这个具体问题.
我怎样才能做到这一点?
asp.net-routing asp.net-mvc-routing asp.net-core-mvc asp.net-core-2.0
我一直在试图弄清楚如何使用ASP.net 4.0 WebForms的路由功能.我添加了一条到我的路线集的路线:
void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute(
"about-route",
"about/",
"~/About.aspx"
);
}
Run Code Online (Sandbox Code Playgroud)
在我的母版页中,我尝试执行以下操作:
<asp:HyperLink ID="asdf" runat="server" NavigateUrl='<%= GetRouteUrl("about-route", new {}) %>'>Test</asdf>
Run Code Online (Sandbox Code Playgroud)
我遇到了编译器错误:服务器标签不能包含<%...%>结构.
在Web窗体中的服务器控件中创建路由URL的正确方法是什么?我还需要将其包含在以下内容中:
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
<Items>
<asp:MenuItem NavigateUrl="ROUTE HERE" Text="Home"/>
<asp:MenuItem NavigateUrl="ROUTE HERE" Text="About"/>
</Items>
</asp:Menu>
Run Code Online (Sandbox Code Playgroud) 我是ASP.NET MVC的新手(使用版本3)并且无法获得ActionLink或RouteLink正如我期望的那样工作.在这个应用程序中,一个事件可以有很多活动,我希望使用以下方式路由到它们:
/Event/1/Activity /Event/1/Activity/Index (same as previous) /Event/1/Activity/Details/5
这两个助手生成的HTML总是如下所示:
/Event/1
这是代码......
查看Razor HTML
@Html.RouteLink("View Sessions", "SubControllerIndex",
new { eventId = Model.Id, controller = "Activity", action = "Index" })
@Html.ActionLink("View Sessions", "Index", "Activity", new { eventId = Model.Id }, null)
Run Code Online (Sandbox Code Playgroud)
路由映射
routes.MapRoute(
"SubControllerIndex",
"Event/{eventId}/{controller}",
new { controller = "Activity", action = "Index" },
new { eventId = @"\d+" }
);
routes.MapRoute(
"ActivityIndex",
"Event/{eventId}/{controller}/{action}/{id}",
new { controller = "Activity", action = "Index", id = UrlParameter.Optional },
new { …Run Code Online (Sandbox Code Playgroud) 我正在使用ASP.NET 4 Web表单路由,例如:
routes.MapPageRoute("page-browse", "{Language}/{Label}", "~/Default.aspx")
Run Code Online (Sandbox Code Playgroud)
所以webadress可能看起来像: http://localhost/mywebsite/eng/home
在我的网站的根目录中,我有一个文件夹"Images".
当我在我的网站的根目录时,例如通过使用,图像显示有效 http://localhost/mywebsite/default.aspx
但是当使用路由时它不起作用,因为图像相对URL将会看http://localhost/mywebsite/eng/images而不是http://localhost/mywebsite/images
有没有办法使用ASP.NET 4路由机制来防止这种情况?或者是使用绝对网址到图像的唯一方法?
我有一个带有多个GET动作的ApiController.问题是我不想在他们名字的开头没有"获取"来命名我的行为.
例如,我可以有一个名为"GetImage"的Action,它可以正常工作.如果我将其命名为"UpdateImage",它将不会调用Action,因为它可能需要在动作名称的开头显示"Get".
我可以通过为我想要使用的每个动作定义不同的路径来解决它,但我相信必须有一个更容易的方法来实现它.
我也试过[HttpGet]属性,不幸的是它没有做到这一点.
我的路线配置:
routes.MapHttpRoute(
name: "ImagesApi",
routeTemplate: "api/images/{action}/{id}",
defaults: new { controller = "ImageStorageManager",id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我正在通过api/images/GetImage或访问它api/images/UpdateImage
我们的应用程序有2个域名(www | api).mydomain.com
如何将请求路由到api.mydomain.com到api控制器和www到mvc控制器?
谢谢
我的 MVC 应用程序是在根/全局级别设置控制器的。这些没有明确的区域。我还有一个“管理”区域。以 /admin/ 开头的 URL 将路由到管理区域中的匹配控制器。其他 URL 将路由到匹配的全局控制器。这在大多数情况下工作正常。
我遇到的问题是,如果 URL 与管理区域中的控制器匹配,而全局区域中不存在同名控制器,则请求会错误地路由到管理区域中的控制器。我知道这种情况正在发生,因为我在相关控制器中的匹配操作上放置了断点。
例如,我有一个CalendarController在管理区域中调用的控制器。当我访问时/admin/calendar,它起作用,因为它在 中找到了操作和相应的视图Areas/Admin/Views/Calendar/Index.cshtml。当我访问时出现问题/calendar。我在根级别没有名为 Calendar 的控制器,但由于某种原因,它将请求路由到管理区域CalendarController,这是我不想要的。我希望它返回 404,因为CalendarController根级别不存在。相反,我收到错误,因为它正在根级别(位于 )搜索视图,/Views/Calendar/Index.cshtml即使匹配的控制器位于管理区域中。
如何防止在管理区域中搜索匹配的控制器,除非 URL 中包含 /admin ?
这是相关的路由代码,除了添加命名空间之外,基本上都是现有的。如果没有命名空间,问题仍然会发生。实际应用程序中有更多路线,但我在全新的 MVC 项目中得到了相同的行为。
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "AreaProblem.Areas.Admin.Controllers" }
); …Run Code Online (Sandbox Code Playgroud)