我有这个网址:
/controller/action/value
这个动作:
public ActionResult Get(string configName,string addParams)
{
}
Run Code Online (Sandbox Code Playgroud)
如何设置路由表以使路由引擎将值绑定到控制器中configName任何操作的参数Config?
如何定义链接到默认操作的路由.
例如,
/Customer/acme-company
/Client/bill-johnson
Run Code Online (Sandbox Code Playgroud)
一直在寻找方法获取控制器客户端和客户.
我有一个有很多路线的网站.
一些路线,例如/sector-overview我希望用户看到的特定页面.
其他路线,例如/sectoroverview,最终呈现包括在主页上的部分的动作.
第二条路径仅仅是应用程序的内部路径,但如果用户在其地址栏中输入该路径(这是一个容易犯的错误),系统会将其视为有效请求并返回HTML部分.
我可以将第二条路线重命名为类似的东西/internal-sectoroverview,但这并不能解决问题,只是隐藏它.
如果用户键入此请求,是否有任何方法可以阻止处理请求?处理这个问题的最佳方法是什么?
我的ASP.NET MVC3应用程序中有一些区域:
namespace MyProject.Areas.myarea
{
public class myareaAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "myarea";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"myarea_default",
"myarea/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个区域包含"Hello"控制器,带有"Smile"动作.
在整个项目的global.asax文件中,我有:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
所以,当我请求"localhost/myarea/hello/smile"时,它按预期调用适当的控制器.
但!当我请求"localhost/hello/smile"时,它会调用hello控制器STILL!有了它,它会查找不在myarea/Views文件夹中的Views,而是在〜/ …
现在我有一个匹配的地图路线
foreach(var subcat in Sports.Categories)
{
routes.MapRoute("MultiRoute" + i, subcat+"/{title}",
new { controller = "Routing", action = "Redirect", category = subcat });
}
Run Code Online (Sandbox Code Playgroud)
我有一些体育类别:棒球,足球,篮球等,但我也想将篮球与篮球比赛,篮球集锦,十大篮球等等进行匹配。
这意味着我必须允许subcat之前和之后都具有通配符,因为BasketBall-Plays包含篮球一词,所以我希望它重定向到那里。
如何为地图路由创建包含部分?
编辑:TLDR:我有一个名为篮球的子猫,但我想匹配每个带有单词篮球的URL。所以篮球比赛/前10名应该真正打篮球/前10名
尝试过:
foreach(var subcat in Sports.Categories)
{
routes.MapRoute("MultiRoute" + i, subcat+"/{title}",
new { controller = "Routing", action = "Redirect", category = subcat }),
new{sub = ".*"+sub+".*" });
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个混合MVC和Web窗体网站-使用更高版本的Visual Studio 2013工具非常容易。一切正常,我可以正确导航到MVC和Web窗体页面。
但是,我想做的是将所有Web表单页面都放在一个特定的子目录中,然后在不使用该子目录的情况下路由到它们。
/
+ Content
+ Controllers
+ Models
+ Scripts
+ Views
+ WebPages
+ Default.aspx
+ MyWebForm.aspx
Run Code Online (Sandbox Code Playgroud)
因此,我希望能够访问:
/WebPages/Default.aspx as /Default.aspx or even just /
/WebPages/MyWebForm.aspx as /MyWebForm.aspx
Run Code Online (Sandbox Code Playgroud)
这可能吗?
任何意见,将不胜感激。
我有一个涉及多个领域的MVC5项目。我有一个默认区域(名为Default),其中有一个默认控制器(名为DefaultController)。这可以在站点路线上访问。
[RouteArea]
public class DefaultController : Controller
{
[Route]
public ActionResult Index()
{
return View("Index");
}
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.LowercaseUrls = true;
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyProject.Areas.Default.Controllers" }
);
}
Run Code Online (Sandbox Code Playgroud)
控制器已正确加载,但是Areas/Default/Views/Default/Index.cshtml找不到视图(位于)。为什么MVC找不到正确的位置?
The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc asp.net-mvc-routing attributerouting asp.net-mvc-5
我的问题:当我使用以下链接时,一切正常:
http://localhost:12816/en/Statistic/Reports
Run Code Online (Sandbox Code Playgroud)
但当我删除"/ en"时 - 我收到应用程序错误:
"'''应用程序中的服务器错误.无法找到资源."
我有几个不同语言的资源文件.当用户请求没有任何语言标识的链接时,我希望我的应用程序使用默认语言(英语).
例如,我希望这些链接完全相同:
http://localhost:12816/Statistic/Reports
http://localhost:12816/en/Statistic/Reports
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我注意到当我要求没有语言的短链接时 - 一切正常:
http://localhost:12816/Statistic/
Run Code Online (Sandbox Code Playgroud)
但是当链接更深时,我得到并且错误
我认为问题在于路由,但我是路由的新手,所以请帮助我:)
PS:我试过这样,但它不起作用:
routes.MapRoute("Default", "{lang}/{controller}/{action}/{id}",
new{
lang = "en",
controller = "Home",
action = "Index",
id = UrlParameter.Optional,
});
routes.MapRoute("Default no language", "{controller}/{action}/{id}",
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
});
Run Code Online (Sandbox Code Playgroud) 我正在使用asp.net 5 mvc api,并且目前正在使用Accounts Controller。
因为我在许多不同的地方都看到在/api/TokenWeb api中有使用路由到登录名的约定。我想路由到没有帐户前缀的特定方法,我更喜欢不使用其他控制器,并且我更喜欢在Startup.cs中使用属性而不是路由,以避免将来造成混乱。
这是我目前所拥有的
[Route("api/[controller]")]
public class AccountsController : Controller
{
[HttpPost("login")]
public async Task<JwtToken> Token([FromBody]Credentials credentials)
{
...
}
[HttpPost]
public async Task CreateUser([FromBody] userDto)
{
...
}
}
Run Code Online (Sandbox Code Playgroud) c# asp.net asp.net-mvc-routing asp.net-core-mvc asp.net-core
我写了一个属性路线Route("Home/{category?}/{Subcategory?}/List")要符合下面的例子
/Home/C1/S1/List,/Home/C1/List,/Home/List
但只是为了匹配第一个url,可选参数不起作用.如何使用路由规则匹配上述三个示例?
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[Route("Home/{category?}/{subcategory?}/List")]
public IActionResult List(Category? category = null, SubCategory? subcategory = null)
{
return Content(category.ToString() + "/" + subcategory.ToString());
}
[Route("Home/{code}/Detail")]
public IActionResult Detail(string code)
{
return Content(code);
}
}
public enum Category
{
C1,
C2,
C3,
C4
}
public enum SubCategory
{
S1,
S2,
S3,
S4
}
Run Code Online (Sandbox Code Playgroud)
类似的问题