标签: asp.net-routing

需要ASP.NET MVC Route Id参数

我有这条路线:

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 - 并要求我处理它.

如果路由本身实现了这一点,而不是在控制器本身中需要不合理的空检查,那似乎更整洁.

我在谷歌没有发现这个具体问题.

我怎样才能做到这一点?

c# asp.net-mvc asp.net-routing asp.net-mvc-routing

3
推荐指数
1
解决办法
7137
查看次数

是否可以像这样在 ASP.NET Core 中制作对 SEO 友好的 Url

我想问你们是否有可能为我的项目做一些这样的路由/{action}/{title}

在此处输入图片说明

我想知道这是否可能,这个 url 也必须是主键吗?由于没有传递 ID 来知道这是哪篇博文。

谢谢你。

asp.net-routing asp.net-mvc-routing asp.net-core-mvc asp.net-core-2.0

3
推荐指数
1
解决办法
2799
查看次数

ASP.net WebForms - 在标记中使用GetRouteUrl

我一直在试图弄清楚如何使用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)

c# asp.net webforms asp.net-routing

2
推荐指数
1
解决办法
5122
查看次数

无法使ActionLink或RouteLink生成正确的URL

我是ASP.NET MVC的新手(使用版本3)并且无法获得ActionLinkRouteLink正如我期望的那样工作.在这个应用程序中,一个事件可以有很多活动,我希望使用以下方式路由到它们:

/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)

.net c# asp.net-mvc asp.net-routing asp.net-mvc-3

2
推荐指数
1
解决办法
2052
查看次数

ASP.NET 4 Web表单路由图像

我正在使用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路由机制来防止这种情况?或者是使用绝对网址到图像的唯一方法?

asp.net routing asp.net-routing asp.net-4.0

1
推荐指数
1
解决办法
3401
查看次数

ApiController GET动作命名

我有一个带有多个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

api asp.net-mvc asp.net-routing asp.net-web-api

1
推荐指数
1
解决办法
3603
查看次数

ASP.NET通过子域路由到mvc或api的路由

我们的应用程序有2个域名(www | api).mydomain.com

如何将请求路由到api.mydomain.com到api控制器和www到mvc控制器?

谢谢

asp.net-mvc asp.net-routing asp.net-mvc-4 asp.net-web-api

1
推荐指数
1
解决办法
3013
查看次数

MVC5中如何防止使用错误区域的控制器

我的 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)

c# asp.net-mvc asp.net-routing asp.net-mvc-5

0
推荐指数
1
解决办法
828
查看次数