标签: asp.net-mvc-routing

ASP.NET MVC - Routes和UrlHelper

我有以下路线

routes.MapRoute(
    "GigDayListings",                                   // Route name
    "gig/list/{year}/{month}/{day}",                    // URL with parameters
    new { controller = "Gig", action = "List" },
    new
    {
        year = @"^[0-9]+$",
        month = @"^[0-9]+$",
        day = @"^[0-9]+$"
    }  // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)

当我访问URL时

gig/list/2009/01/01
Run Code Online (Sandbox Code Playgroud)

这条路线完美匹配,我的行动被召唤.

在我看来,我有一个帮助器,它执行以下操作:

var urlHelper = new UrlHelper(ViewContext);
string url = urlHelper.RouteUrl(ViewContext.RouteData.Values);
Run Code Online (Sandbox Code Playgroud)

生成的字符串是:

http://localhost:3539/gig/list?year=2005&month=01&day=01
Run Code Online (Sandbox Code Playgroud)

为什么不呢

http://localhost:3539/gig/list/2005/01/01
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

asp.net-mvc asp.net-mvc-routing urlhelper

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

ASP.Net MVC:用路由重写

我想映射以下URI:

/admin/controller/action/id
Run Code Online (Sandbox Code Playgroud)

以下内容:

Controller -> Controller
Action     -> Admin_Action
Run Code Online (Sandbox Code Playgroud)

例如:

/admin/Users/Create

Controller -> Users
Action  -> Admin_Create

/admin/Users/Delete/1

Controller -> Users
Action -> Admin_Delete(1)
Run Code Online (Sandbox Code Playgroud)

我可以使用路由规则实现吗?

asp.net asp.net-mvc asp.net-mvc-routing

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

如何使用 MapHttpRoute 捕获所有 URL

除了所有定义的 api 路由之外,我还想在 LegacyUriRedirect 操作中处理任何其他 url。

我试图将 routeTemplate 留空,但它只捕获根 url 并忽略任何带有段的 url。

如何更改以下代码以捕获所有包含任何段的 url?

 config.Routes.MapHttpRoute(
                name: "LegacyUriRedirect",
                routeTemplate: "",
                defaults: new { controller = "URI", action = "LegacyUriRedirect" }
    );
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-routing asp.net-mvc-4

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

如何让 routelink 返回正确的 URL?

这是复制问题的程序。

  1. 启动新的 mvc 4 项目。
  2. 将以下行添加到 RegisterRoutes() 方法中的“默认”路由之前

    routes.MapRoute(
            name: "Test",
            url: "Test/{action}",
            defaults: new { controller = "Test", action = "Index" }
    );
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将以下内容添加到 Index.cshtml 和 About.cshtml

    @Html.RouteLink("link to TestController", "Test")
    
    Run Code Online (Sandbox Code Playgroud)

如您所见,生成的 html 代码对于 2 个页面是不同的。我希望 URL 是“/Test”,它为 Index.cshtml 正确呈现,但它成为 About.cshtml 的“/Test/About”。

我的问题是是否有任何记录的方法来生成相同的正确 URL。上面的例子只是为了演示目的而创建的。我想使用路由表信息来生成菜单。

asp.net-mvc asp.net-mvc-routing routelink

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

使用自定义段变量设置ASP.Net MVC 4路由

我刚刚开始研究一个有几个区域的应用程序(基本网格主/系统细节类型......)我正在研究利用MVC中的漂亮路由功能(特别是4个)而我"只是没有得到它"我相信.

目前唯一定义的路线是基本路线:

routes.MapRoute("Default", 
            "{controller}/{action}/{id}", 
            new { controller = "Account", action = "Index", id = UrlParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

这很好,它适用于我们定义的区域,所以我假设它必须知道用户在哪里,并根据用户所在的位置/区域上下文路由到相应的控制器..到目前为止很好..

现在,我正在尝试建立一条可以处理的新路线

/someController/someAction/{statusName} 
Run Code Online (Sandbox Code Playgroud)

特别是:

/OrderManager/List/New 
Run Code Online (Sandbox Code Playgroud)

/OrderManager/List/Viewed
Run Code Online (Sandbox Code Playgroud)

其中"新"是"新"状态,并且Action Signature看起来像:

public ActionResult List(string statusName)
Run Code Online (Sandbox Code Playgroud)

我假设我可以添加新的路由低于默认的路由标识"statusName"而不是Id,但当然,H将如何路由机制知道之间的区别:

/控制器1 /动作1/15

/控制器2 /动作2 /新

我确实尝试添加一个"静态"路径的形式

routes.MapRoute("Default", 
            "ControllerName/ControllerAction/{statusName}", 
            new { statusName = UrlParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

我以为我可以"hiJack"只是一条路线,并做一些特殊的事情,但要知道有用,路由器在第一场比赛停止?我认为无论如何这是解决这个问题的错误方法..

所以现在我想要达到这样的想法:

/somecustomroutename/somesortValue
Run Code Online (Sandbox Code Playgroud)

恩./ OrderManagerList/viewNew

这些路线基本上是"别名".我原以为添加以下路线就可以了:

 routes.MapRoute("Default_List",
          "OrderManagerList/{statusName}",
          new {controller="OrderManager", action="List", statusName= UrlParameter.Optional }
      );
Run Code Online (Sandbox Code Playgroud)

与OrderManager控制器上的相关操作:

public ActionResult List(string statusName)
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么,参数都为null,或者"无法找到资源"

我知道控制器需要有一个相应的View文件..但这不是问题,问题是我尝试理解路由..

所以我的问题......从根本上说,我对MVC(4)中的路由缺少什么?甚至一些像我这样的傻瓜能够理解的好文章?

我的理解; 定义路线,并映射它的"端点"..然而,我想我不理解机器正在制造的假设.

无论如何,如果需要进一步解释/编辑,请告诉我..

提前致谢.

asp.net-mvc routing asp.net-mvc-routing asp.net-mvc-4

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

使用ASP.NET MVC的Piranha CMS路由问题

我正在尝试将Piranha CMS(v2.2.0)与现有的ASP.NET MVC应用程序集成.我可以运行所有原始应用程序页面和CMS管理器页面.我还可以看到由CMS管理的页面草稿,但是当我尝试查看从CMS托管的实时页面版本时,我收到HTTP 404"无法找到资源"消息.

以下草案网址有效:

http://localhost:5316/draft/start
Run Code Online (Sandbox Code Playgroud)

但是以下的实时网址失败了:

http://localhost:5316/home/start
Run Code Online (Sandbox Code Playgroud)

原始应用程序确实有一个"Home"控制器,我已经尝试将其重命名为"Test"以防出现冲突问题.我可以看到新的"测试"位于内容,但/ home/start url仍然失败.

据我所知,我的RouteConfig代码是:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "Maps.Portal.Controllers" }
).DataTokens["UseNamespaceFallback"] = false;
Run Code Online (Sandbox Code Playgroud)

我的web.config设置是:

<settings>
  <managerNamespaces value="" />
  <disableManager value="false" />
  <passiveMode value="true" />
  <prefixlessPermalinks value="false" />
</settings>
Run Code Online (Sandbox Code Playgroud)

我已经尝试将prefixlessPermalinks设置为true但这没有帮助.

我猜Piranha CMS没有捕捉自己托管的网页的路由?有任何想法吗?

asp.net-mvc asp.net-mvc-routing piranha-cms

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

路由映射到不同路由的参数

我正在尝试为我的ASP.NET MVC 5项目设置一些路由.

现在我有一些奇怪的行为:

  • /Home/About 正确路由
  • /Home/Index 被路由到 /XmlRpc?action=Index&controller=Blog
  • /HOme/Index 工作(是的,我发现由于一个错字) - 我一直认为路由不区分大小写?
  • 使用Url.Action("Foo","Bar")也创造/XmlRpc?action=Foo&controller=Bar

这是我的RouteConfig档案:

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

    routes.Add("XmlRpc", new Route("XmlRpc", new MetaWeblogRouteHandler()));

    routes.MapRoute("Post", "Post/{year}/{month}/{day}/{id}", new {controller = "Blog", action = "Post"}, new {year = @"\d{4,4}", month = @"\d{1,2}", day = @"\d{1,2}", id = @"(\w+-?)*"});
    routes.MapRoute("Posts on Day", "Post/{year}/{month}/{day}", new {controller = "Blog", action = "PostsOnDay"}, new {year = @"\d{4,4}", month = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc iroutehandler asp.net-mvc-routing xml-rpc.net

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

映射自定义路由ASP.NET MVC5

我之前没有使用过.NET Routing.我有一个网址:http://myurl.com/Account/Login/?IsIPA=true.我希望能够使用以下内容点击此URL:http://myurl.com/IPA

这是我想要的唯一自定义路线.

我可以为这样的单个URL创建路由吗?

我的代码不起作用是:

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
        routes.MapRoute("IPA", "Account/Login/{IsIPA}", new { controller = "Account", action = "Login", IsIPA = "true" });

    }
Run Code Online (Sandbox Code Playgroud)

我收到错误:

IsIPA具有路由模板的路由上的约束条目Account/Login/{IsIPA}=True必须具有字符串值或者是实现的类型System.Web.Routing.IRouteConstraint.

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

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

基于Http Header值的ASP.NET MVC5/6路由

假设我有一个最基本的控制器

public class HomeController : Controller
{
    public ActionResult Index(string id, string language)
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

其中包含2个参数.但是,有一个要求是调用action方法的客户端应该id从URL 传递值,但是language从http头传递值.这意味着url应该是/Home/Index/12345,同时调用客户端将设置Http Header值language : en.

如何在MVC5或MVC6中设置路由以达到要求?

请不要提供Web Api的样本.

谢谢

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

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

使用MVC的Attribute Routing和RouteLocalization.mvc的特定于语言的默认URL

我希望能够为我的网站创建一个简洁的特定于语言的默认URL,以便当有人浏览时:

somesite.com

他们被重定向到语言文化页面,例如:

  • somesite.com/en-US/
  • somesite.com/sp-MX/
  • somesite.com/fr-FR/

具体来说,我希望/ Home/Index附加到URL:

  • somesite.com/en-US/Home/Index
  • somesite.com/sp-MX/Home/Index
  • somesite.com/fr-FR/Home/Index

我致力于使用RouteLocalization.mvc创建此站点

我想在可行的范围内使用MVC属性路由.

我无法弄清楚如何使Start()方法重定向到特定于语言文化的URL而不添加像"index"这样的东西.

我试图遵循的样本:

using RouteLocalization.Mvc;
using RouteLocalization.Mvc.Extensions;
using RouteLocalization.Mvc.Setup;

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.Clear();

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes(Localization.LocalizationDirectRouteProvider);

        const string en = "en-us";
        ISet<string> acceptedCultures = new HashSet<string>() { en, "de", "fr", "es", "it" };

        routes.Localization(configuration =>
        {
            configuration.DefaultCulture = en;
            configuration.AcceptedCultures = acceptedCultures;
            configuration.AttributeRouteProcessing = AttributeRouteProcessing.AddAsNeutralAndDefaultCultureRoute;
            configuration.AddCultureAsRoutePrefix = true;
            configuration.AddTranslationToSimiliarUrls = true;
        }).TranslateInitialAttributeRoutes().Translate(localization …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc localization asp.net-mvc-routing asp.net-mvc-4

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