任何人都可以告诉我如何手动编辑我的路线的命名惯例..让我解释一下.我按照微软标准用英语编程,但我需要
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) 鉴于这些路线:
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视图.
为什么不重定向/?
这是我在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)
但是,要做到这一点还有更好的方法吗?
我需要添加一个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.
我究竟做错了什么?
我正在使用默认路由,因此我不需要指定控制器.
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) 我有一个处理的路线设置"{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.exehttp://localhost/Software/Download/Filenameexehttp://localhost/Software/Download/Filename.exe/我在家庭控制器中创建两个具有不同名称的动作方法
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 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) 我很难在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
我有几个用于创建导航栏按钮的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()方法了?