标签: asp.net-mvc-routing

ASP.NET MVC 3 RESTful Routing:RouteData必须包含一个名为Action的项目?

我们使用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属性发生了显着变化 - 其他任何有这些问题的人都有解决方案吗?

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

6
推荐指数
1
解决办法
5377
查看次数

ASP.Net MVC网址设计和结构指南

我想为我们的网络应用程序设计网址提供一些专家建议.这不是公共域名网站,它是基于供应链内联网的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?

  • 在MVC中隐藏默认操作是否合理,例如"Claim/21/Manage"shud是"Claim/21","/ Users/List"shud是"/ Users"......
  • 参数 - 它们更好地嵌入在URL中,或者作为查询字符串附加

任何通用指南或参考文献也都很棒.

参考:Web服务URL - (部分:设计URI模板) http://msdn.microsoft.com/en-us/library/dd203052.aspx

asp.net-mvc url-rewriting asp.net-mvc-routing

6
推荐指数
1
解决办法
990
查看次数

MVC Routing Html.ActionLink使用?id = 1而不是/ id创建URL

当我使用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)

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

6
推荐指数
1
解决办法
2778
查看次数

宁静的MVC Web Api继承

我自己建立了一个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}/productsGET 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

6
推荐指数
1
解决办法
785
查看次数

如何使用连字符实现asp.net mvc动作名称?

如何实现asp.net的MVC动作名称连字符例如,www.domain.com/about-us这里about-us是在家庭控制器阿克顿名.通过这种方法,我可以实现有动作名称一样contact-us,how-to

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

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

MVC5:控制器中的属性路由优先级

我在我的控制器中使用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方法:

  • 域/
  • 域/ {用户名}
  • 域/家庭/
  • 域的/ home/{用户名}
  • 域的/ home /指数/
  • 域的/ home /索引/ {用户名}

第二控制器:

[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.net-mvc-routing attributerouting asp.net-mvc-5

6
推荐指数
1
解决办法
903
查看次数

MVC:如何在第一个路由参数中管理URL中的slahses

我需要在我的ASP MVC应用程序中将两个可能包含斜杠的变量映射到控制器.让我们看一个例子.

在此输入图像描述

  • 存储库和路径将是URL编码的参数.
  • 存储库可以有0个斜杠或1个斜杠作为最大值(rep或rep/module)
  • 路径可以有任意数量的斜杠.

例如,这些是有效的URL:

http://mysite/rep/Items
http://mysite/rep/module/Items/foo/bar/file.c
Run Code Online (Sandbox Code Playgroud)

有人可以就如何定义这条路线提出一些建议吗?

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

6
推荐指数
1
解决办法
2526
查看次数

关于名为属性的MVC控制器有什么特别之处吗?

在尝试解决这个问题多年之后,考虑路由冲突等等 - 我从一开始就开始了一个单独的项目.

当您尝试访问根站点(http://site/properties)时,看起来名为"属性"的MVC控制器始终返回403.14禁止消息- 但是,其他页面工作(http://site/properties/index).

它作为区域中的控制器工作正常,但是,我无法在主站点中创建它.

我想知道是否有人知道为什么以及最好的方法是什么?

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

6
推荐指数
1
解决办法
158
查看次数

测试请求的URL是否在Route表中

我想测试一个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.我需要改变什么?

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

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

基于属性的路由和顺序

我在 .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 版本OrderRouteAttribute.

我有这些动作:

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)

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

6
推荐指数
0
解决办法
884
查看次数