我们使用ASP.NET MVC Futures项目(Microsoft.Web.Mvc)来使MVC 3应用程序能够使用RESTful路由.此应用程序已在MVC 1及其相关的System.Web.Mvc.Resources.dll程序集下完美地工作,以实现相同的功能.
我们正在注册这些路线:
routes.MapResourceRoute("MyController", "{MyItemId}");
Run Code Online (Sandbox Code Playgroud)
哪个应该给我们的路线,如:
/MyController
/MyController/{MyItemId}
/MyController/{MyItemId}/EditForm
/MyController/CreateForm
Run Code Online (Sandbox Code Playgroud)
我们得到四个有效路由中的三个 - 该列表中的第二个路径(/ MyController/{MyItemId})返回错误:
Server Error in '/' Application.
The RouteData must contain an item named 'action' with a non-empty string value.
Run Code Online (Sandbox Code Playgroud)
当我尝试追加?action = Details或其他向URL注入动作参数的方法时,我得到404错误.看起来Futures代码中的WebEnabledApi属性发生了显着变化 - 其他任何有这些问题的人都有解决方案吗?
我想为我们的网络应用程序设计网址提供一些专家建议.这不是公共域名网站,它是基于供应链内联网的Web应用程序,仅由一组经过身份验证的用户使用.
这是一些例子 -
/Claim/12/Manage
FORMAT: controller/{ID}/action
Run Code Online (Sandbox Code Playgroud)
指向"Claim Entry"向导的url.这里"12"是ClaimID.它进一步分为用于子数据输入的选项卡.示例:/ Claim/12/Print,/ Claim/12/FileDetails,...
/Users/List
FORMAT: controller/action
Run Code Online (Sandbox Code Playgroud)
显示Grid中的现有用户列表.这个缩写为"/ Users"?同样,我们还有其他一些实体,比如"角色,组织等......"
/Master/Manage/FileType
FORMAT: controller/action/{argument}
Run Code Online (Sandbox Code Playgroud)
我们有一个页面,允许用户管理不同的主表数据.需要知道选择哪个主表(即作为参数发送).是否更好地将其简化为"/ Manage/{argument}",然后根据上面的要求映射该URL?
任何通用指南或参考文献也都很棒.
参考:Web服务URL - (部分:设计URI模板) http://msdn.microsoft.com/en-us/library/dd203052.aspx
当我使用Html.ActionLink()时,创建的URL不是所需的格式:
Html.ActionLink(Model.ProductCode, "Update", new { id = Model.ProductId })
Run Code Online (Sandbox Code Playgroud)
制作此网址
/Update?id=1
Run Code Online (Sandbox Code Playgroud)
当我想要这个网址时:
/Update/1
Run Code Online (Sandbox Code Playgroud)
什么路由选项创建第二个URL?这是我们首选的网址样式.
这两个URL都有效并且显示了正确的页面 - 但是我们只想使用/ id
在Global.asax中,MVC默认路由处理两个URL
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 4 web api
我一直在阅读微软视频,我认为它们很好.使用Http动词.资源是名词,它与存储库等等相同.
但有一件事真的让我烦恼
我的印象是这GET http://www.myurl.com/api/sellers/{id}/products是宁静的,GET http://www.myurl.com/api/products?$filter = sellerID eq {id}而不是.
我所看到的关于新web api的所有内容都是前者.
后者是否有原生支持?如果没有,有没有办法在没有路由一切的情况下做到这一点?
编辑-
进出口寻找的东西,将允许GET http://www.myurl.com/api/sellers/{id}/products和GET http://www.myurl.com/api/products等
更新:
这个问题暂时没有意义,我已经修复了,但这就是为什么第一个答案没有标记为正确.
更新:
在与MilkyWayJoe聊天后,我们谈到了转换/Seller/2/Products为/Products?$filter = sellerID eq 2.有没有人知道如何做到这一点?
asp.net asp.net-mvc asp.net-mvc-routing asp.net-mvc-4 asp.net-web-api
如何实现asp.net的MVC动作名称连字符例如,www.domain.com/about-us这里about-us是在家庭控制器阿克顿名.通过这种方法,我可以实现有动作名称一样contact-us,how-to等
我在我的控制器中使用MVC5的属性路由.
有没有办法控制控制器之间的属性路由优先级?
考虑以下
[Route("home/{action=index}/{username?}")]
public class HomeController : Controller
{
[Route("home/index/{username?}", Order = 1)]
[Route("home/{username?}", Order = 2)]
[Route("{username?}", Order = 3)]
public ActionResult Index()
{
// ... bunch of stuff
}
}
Run Code Online (Sandbox Code Playgroud)
根据上面的代码,HomeController.Index()应使用以下请求调用action方法:
第二控制器:
[Authorize(Roles = "Member")]
[Route("profile/{action=index}")]
public class ProfileController : Controller
{
[Route("profile")]
public ActionResult Index()
{
}
}
Run Code Online (Sandbox Code Playgroud)
本ProfileController.Index()应使用下面的请求来调用.
从示例中,如果我发送domain/profile了url,则会引发歧义异常.似乎domain/{username}和之间存在歧义domain/profile …
我需要在我的ASP MVC应用程序中将两个可能包含斜杠的变量映射到控制器.让我们看一个例子.

例如,这些是有效的URL:
http://mysite/rep/Items
http://mysite/rep/module/Items/foo/bar/file.c
Run Code Online (Sandbox Code Playgroud)
有人可以就如何定义这条路线提出一些建议吗?
在尝试解决这个问题多年之后,考虑路由冲突等等 - 我从一开始就开始了一个单独的项目.
当您尝试访问根站点(http://site/properties)时,看起来名为"属性"的MVC控制器始终返回403.14禁止消息- 但是,其他页面工作(http://site/properties/index).
它作为区域中的控制器工作正常,但是,我无法在主站点中创建它.
我想知道是否有人知道为什么以及最好的方法是什么?
我想测试一个URL是否是在中定义的路由的一部分Global.asax.这就是我所拥有的:
var TheRequest = HttpContext.Current.Request.Url.AbsolutePath.ToString();
var TheRoutes = System.Web.Routing.RouteTable.Routes;
foreach (var TheRoute in TheRoutes)
{
if (TheRequest == TheRoute.Url) //problem here
{
RequestIsInRoutes = true;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法从路由中提取URL.我需要改变什么?
我在 .NET 4.6.1 上的 ASP.NET 4.5 上使用 ASP.NET MVC 5。
我有两个控制器:
FooController
FooIndexController
Run Code Online (Sandbox Code Playgroud)
这是因为 的 Index 操作Foo很复杂,所以我觉得它们最好在自己的单独Controller类中。
我正在使用基于属性的路由。我的 ASP.NET MVC 版本Order在RouteAttribute.
我有这些动作:
class FooController {
// Returns a view to allow editing of the Foo entity
[HttpGet]
[Route("~/{tenant}/foo/{fooName}", Order=2)]
public ActionResult Edit(String fooName, FooViewModel model) {
...
}
}
class FooIndexController {
// Returns a CSV file download listing all of the Foo entities
[HttpPost]
[Route("~/{tenant}/foo/csv", Order=1)]
public ActionResult IndexCsv() {
... …Run Code Online (Sandbox Code Playgroud)