我最近被要求修改一个小的asp.net mvc应用程序,使得url中的控制器名称包含破折号.例如,我创建了一个名为ContactUs的控制器,其中包含一个名为Index and Sent的视图,其中url将是http://example.com/ContactUs和http://example.com/ContactUs/Sent.要求我进行更改的人希望网址为http:// example/contact-us和http://example.com/contact-us/sent.
我不相信我可以更改控制器的名称,因为' - '将是类名中的非法字符.
我正在寻找一个可以应用于控制器类的属性,它可以让我指定控制器在url中使用的字符串,但我还没有找到.
我怎么能做到这一点?
反正有没有让给定控制器中的所有操作重定向到服务器根目录?
例如,如果我有一个带控制器主页和操作术语的URL,我希望URL成为/ terms
如果我有另一个带有控制器主页和操作隐私的URL,那么该URL应该成为/ privacy.
我能够通过硬编码2条路线来做到这一点,但有没有办法自动执行此操作?
routes.MapRoute(
"Term",
"terms",
new { controller = "Home", action = "terms" }
);
routes.MapRoute(
"Privacy",
"privacy",
new { controller = "Home", action = "privacy" }
);
Run Code Online (Sandbox Code Playgroud) 我有一个MVC 2应用程序,应该总是提供一个"漂亮的"404页面.
但是目前我得到了一个低级别的.Net:"'/ sitename'应用程序中的服务器错误..."
我有一个基本控制器,它有一个NotFound动作,将呈现漂亮的404页面.
处理缺失的操作:
protected override void HandleUnknownAction(string actionName)
{
this.NotFound(actionName).ExecuteResult(this.ControllerContext);
}
Run Code Online (Sandbox Code Playgroud)
所以访问{site}/ValidController/NotAnAction正确地路由.
但是访问{site}/NotAController没有.
我设置的路线全部为:
routes.MapRoute(
"MVC routes",
"{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional });
routes.MapRoute(
"Catch All",
"{*url}",
new { controller = "System", action = "NotFound" });
Run Code Online (Sandbox Code Playgroud)
catch全部正确捕获不匹配的路由.
所以{site}/Invalid/Action/id/extra通过catch all正确路由.
然而{site}/Invalid,通过"MVC路由"路由获取并且ASP.Net寻找InvalidController,并且当它找不到时抛出一个愚蠢的异常.
我知道我可以在web.config关卡中覆盖它,但这只是重定向到页面.我想知道路由模式何时匹配但控制器不是有效的控制器名称.
我在哪里可以捕捉并改变这种行为?
我正在开发一个MVC 3 Web应用程序,我想创建这样的东西:
/Controller
/Blog
BogController.cs
ViewsController.cs
ArticlesController.cs
/Customers
SalesController.cs
ProductsController.cs
HomeController.cs
/Views
/Blog
Index.aspx
Summary.aspx
/Views
Index.aspx
Admin.aspx
Show.aspx
/Articles
Show.aspx
Admin.aspx
/Customers
/Sales
Index.aspx
Totals.aspx
/Products
Index.aspx
Promotions.aspx
/Home
Index.aspx
Run Code Online (Sandbox Code Playgroud)
但是他们回答这个人的解决方案是针对MVC 2和MVC 3中的MapAreas属性不会退出(或者至少它不会出现在我看来)
那么我可以做些什么来构建像/ Admin/Users/EditUser这样的结构?例如id = 2?
如果我需要创建一个路由规则,你能不能给我写一个如何做的例子.
我想要控制器/动作,以便当我导航到:
mysite.com/whatever. i type here will pipe into...a ! string.
public ActionResult Index(string anything)
{
// anything = whatever. i type here will pipe into...a ! string.
return View();
}
Run Code Online (Sandbox Code Playgroud)
我需要设置自定义路由吗?
我试过这个,但它似乎不能处理时期等。
routes.MapRoute(
name: "Default",
url: "{*anything}",
defaults: new { controller = "Home", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud) 基本上我有一个问题,我想在多个控制器中进行一个默认操作,并使用我的自定义URL的多个可选参数,如下所示:
www.mydomain.com/{controller name}/{v1}/{v2}/{v3}/{v4}
并且也不希望在url中使用动作名称.我在routeconfig.cs中有这个路由
routes.MapRoute(
name: "Blog",
url: "{controller}/{v1}/{v2}/{v3}/{v4}",
defaults: new
{
controller = "Blog",
action = "searchBlog",
v1 = UrlParameter.Optional,
v2 = UrlParameter.Optional,
v3 = UrlParameter.Optional,
v4 = UrlParameter.Optional
});
routes.MapRoute(
name: "Forum",
url: "{controller}/{v1}/{v2}/{v3}/{v4}",
defaults: new
{
controller = "Forum",
action = "searchForum",
v1 = UrlParameter.Optional,
v2 = UrlParameter.Optional,
v3 = UrlParameter.Optional,
v4 = UrlParameter.Optional
});
Run Code Online (Sandbox Code Playgroud)
行动 BlogController
public ActionResult searchBlog(string v1=null,string v2 = null, string v3 = null, string v4 = null)
{
// use optional parameters …Run Code Online (Sandbox Code Playgroud) 下面的代码做了我想做的事情。如果字符串参数ForSaleOrRent有任何值,但ForSale或ForRent操作方法返回HttpNotFoundResult。我的问题是仅使用 Route 属性可以吗?
[Route("post/{ForSaleOrRent}")]
public ActionResult PostProperty(string ForSaleOrRent)
{
bool IsValidUrl = ForSaleOrRent.ToUpper() == "FORSALE" ||
ForSaleOrRent.ToUpper() == "FORRENT";
if (!IsValidUrl)
{
return new HttpNotFoundResult();
}
return View(ForSaleOrRent);
}
Run Code Online (Sandbox Code Playgroud) asp.net-mvc url-routing asp.net-mvc-routing attributerouting asp.net-mvc-5
我有这条路线:
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 - 并要求我处理它.
如果路由本身实现了这一点,而不是在控制器本身中需要不合理的空检查,那似乎更整洁.
我在谷歌没有发现这个具体问题.
我怎样才能做到这一点?
public class HomeController : Controller
{
[Route("Users/about")]
[Route("Users/WhoareWe")]
[Route("Users/OurTeam")]
[Route("Users/aboutCompany")]
public ActionResult GotoAbout()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
我为行动定义了许多路线GotoAbout().
如何在生成动作URL时以编程方式在剃刀页面中创建路径URL home/users/about?
asp.net-routing asp.net-mvc-routing asp.net-core-mvc asp.net-core-2.0