标签: asp.net-mvc-routing

ASP.NET MVC:控制控制器/视图的命名约定?

任何人都可以告诉我如何手动编辑我的路线的命名惯例..让我解释一下.我按照微软标准用英语编程,但我需要

  www.mydomain.com/Reserva  (Spanish for reservation)
Run Code Online (Sandbox Code Playgroud)

我其实有以下几点

ReservationController然后在下面的视图我有一个名为Reservation的文件夹,名为index.aspx(我的视图).

所以基本上我很满意我的命名约定,但目前有必要浏览

  www.mydomain.com/Reservation
Run Code Online (Sandbox Code Playgroud)

并不是

  www.mydomain.com/Reserva 
Run Code Online (Sandbox Code Playgroud)

让我的页面出现

我安装了默认的MapRoute,我该怎么做才能启用上面的功能?有任何想法吗?

   routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
Run Code Online (Sandbox Code Playgroud)

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

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

为什么RedirectToRoute("Default")不会重定向到根目录?

鉴于这些路线:

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

如果我从TestController的Index操作调用RedirectToRoute("Default")它重定向到/test但我希望它重定向到/

我在调试会话期间返回之前检查了调用RedirectToRoute("Default")的结果.

RedirectToRouteResult result = RedirectToRoute("Default");

它有一个属性RouteName,其值为"Default",属性RouteValues没有元素(Count = 0).我使用Reflector检查,并在内部传递null作为RouteValueDictionary.

同样,我希望给定我的应用程序中定义的路由的默认值,它将重定向到HomeController上的Index视图.

为什么不重定向/

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

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

我如何301重定向/ Home到root?

这是我在Global.asax中删除/ Home的路线:

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

好吧,我需要设置301重定向,因为有人链接到/ Home并且他们获得了404.

那么如何设置301呢?

我检查了路由设置的方式,并在"Home"控制器中寻找"Home"操作方法.

显然我可以添加:

public ActionResult Home() {
    Response.Status = "301 Moved Permanently";
    Response.RedirectLocation = "/";
    Response.End();
    return Redirect("~/");
}
Run Code Online (Sandbox Code Playgroud)

但是,要做到这一点还有更好的方法吗?

asp.net-mvc asp.net-mvc-routing http-status-code-301

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

ASPNET MVC路由问题

我需要添加一个http:// mysite/categoryname路由,所以我添加了

routes.MapRoute(
     "Categories",
     "{CategoryName}",
     new { controller = "News", action = "Category", CategoryName = "" },
     new string[] { "MyProj.Controllers" }
        );
Run Code Online (Sandbox Code Playgroud)

问题是,如果我之前添加它

routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "News", action = "Index", id = UrlParameter.Optional }, 
     new string[] { "MyProj.Controllers" }
        );
Run Code Online (Sandbox Code Playgroud)

主页出错,因为它进入类别路线; 如果我在最后位置添加类别路线,则永远不会输入,http:// mysite/category_name给我404.

我究竟做错了什么?

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

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

ASP.NET MVC:出现空ActionLinks

我正在使用默认路由,因此我不需要指定控制器.

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

有了这个,我可以创建像myapp.com/Customers而不是myapp.com/Home/Customers这样的网址

当我在本地测试时,一切都很好.当我上传实时版本时,使用Html.ActionLink生成的任何链接都是空的.我知道我正在使用Html.ActionLink,因为它在本地工作正常:

//                   Title                 Action      Controller
<%: Html.ActionLink("Manage My Settings", "Settings", "Home") %>
Run Code Online (Sandbox Code Playgroud)

我删除了所有路由,但默认情况下,尝试使用和不使用控制器等指定ActionLink.我甚至尝试恢复路由中的控制器,例如:

"{controller}/{action}/{id}"
Run Code Online (Sandbox Code Playgroud)

什么都没有.一切都在当地工作.有点生气.

更新:

好的,发现了一个奇怪的发现.我在id之后实际上有另一个可选的UrlParameter,称为page.我愚蠢地没有在示例中包含它,因为我认为它没有任何区别.如果我把它拿出来,事情似乎有效.

所以,实际上,这有效:

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

这个作品!

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

但是没有工作

routes.MapRoute(
   "Default", 
   "{action}/{id}/{page}", 
    new …
Run Code Online (Sandbox Code Playgroud)

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

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

当我指定某些文件扩展名时,ASP.net路由被忽略

我有一个处理的路线设置"{Object}/{Operation}/{Name}".

如果我发出以下请求,则路由工作正常:( http://localhost/Software/Download/Filenameexe 请注意,如果未指定文件扩展名,则不需要正斜杠).当我发出请求时,请求也会成功:( http://localhost/Software/Download/Filename.exe/ 注意尾随正斜杠).

但是当我发出请求时,我得到了404 :( http://localhost/Software/Download/Filename.exe这次是文件扩展名,没有尾随正斜杠).

使用内置的Visual Studio 2010开发asp.net Web服务器时,一切都运行得很漂亮,但是当我在IIS中启动网站时,它只会抛出404,除非我追加尾随正斜杠.

如何让ASP.net路由引擎不那么挑剔并接受所有示例?

  • http://localhost/Software/Download/Filename.exe
  • http://localhost/Software/Download/Filenameexe
  • http://localhost/Software/Download/Filename.exe/

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

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

ASP.Net MVC路由问题url无法正常工作

我在家庭控制器中创建两个具有不同名称的动作方法

public ActionResult Default()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";
        return View("index");
    }

    public ActionResult Index(int a)
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC! and Your Age is " + a;
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

我的路由代码看起来像

    routes.MapRoute(
      "Default1", // Route name
      "{Home}/{ID}", // URL with parameters
      new { controller = "Home", action = "Index", id =UrlParameter.Optional});
            routes.MapRoute(
                "Default2", // Route name
                "{Home}", // URL with parameters
                new { controller = "Home", action = "Default" }
            );

            routes.MapRoute(
                "Default", // Route …
Run Code Online (Sandbox Code Playgroud)

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

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

MVC 4:自定义路线

ASP.NET MVC 4网站.

有一个名为"Locations"的数据库表,它只包含三个可能的位置(例如"CA","NY","AT")默认路由为:

http://server/Location/  --- list of Locations
http://server/Location/NY --- details of NY-Location
Run Code Online (Sandbox Code Playgroud)

如何在没有/ Location/ - 位的情况下创建自定义路由?(我发现它更好一点)

以便

http://server/NY - details of NY
http://server/AT - details of AT
.... etc...
Run Code Online (Sandbox Code Playgroud)

http://server/Location  --- list of Locations
Run Code Online (Sandbox Code Playgroud)

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

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

具有不同参数类型的MVC3路由

我很难在MVC3中解决路由问题.

以前我一般只是避开整个区域,并坚持丑陋的老式?id=1&foo=bar网址.不太好.

我这样定义了4条路线

routes.MapRoute("Blog", "{controller}/{action}/{PageNumber}/{PostsPerPage}", new { controller = "blog", action = "list", PageNumber = UrlParameter.Optional, PostsPerPage = UrlParameter.Optional });
routes.MapRoute("Code", "{controller}/{action}/{title}", new { });
routes.MapRoute("Id", "{controller}/{action}/{id}", new { });
routes.MapRoute("Default", "{controller}/{action}", new { controller = "home", action = "index" });
Run Code Online (Sandbox Code Playgroud)

我试图从最具体到最少的顺序排序.

第一个"博客"路线工作正常,我可以使用类似的URL /blog/list/2/5,它正确映射到我的控制器.

底部的默认路线也正如我所料.

但是如果我有这样的动作方法:

public ActionResult BarX(int id)
{
    //some stuff
}

public ActionResult BarY(string title)
{
    //some stuff
}
Run Code Online (Sandbox Code Playgroud)

我希望它使用第三条路线并生成一个类似的URL /foo/barX/3.

但是,如果我使用

@Html.ActionLink("TEST1", "barX", "foo", new { id = 3 }, null)
Run Code Online (Sandbox Code Playgroud)

生成的URL是 …

asp.net asp.net-mvc routes asp.net-mvc-routing asp.net-mvc-3

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

ASP.NET 5中的RouteData.GetRequiredString的等效项

我有几个用于创建导航栏按钮的HtmlHelper扩展方法 - 一个用于上下文相关帮助链接.在我的扩展方法中,我需要知道当前控制器和动作的名称,例如:

var currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
var currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
Run Code Online (Sandbox Code Playgroud)

我可以在ASP.NET 5中使用什么来获取此信息,因为RouteData上没有GetRequiredString()方法了?

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

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