标签: asp.net-mvc-routing

基于Web浏览器/设备的ASP.NET MVC路由(例如iPhone)

从ASP.NET MVC中,是否可以基于访问设备/浏览器路由到不同的控制器或操作?

我正在考虑为我的网站的某些部分设置替代操作和视图,以防从iPhone访问它,以优化它的显示和功能.我不想为iPhone创建一个完全独立的项目,因为大多数网站在任何设备上都可以.

有关如何做到这一点的任何想法?

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

7
推荐指数
1
解决办法
1575
查看次数

将Index设置为控制器的默认路由

我有一个网址

我想变成

这也可能是http://www.roadkillwiki.org/Page/my-url-with-spaces - 参数是一个字符串.我尝试过的路线设置是:

routes.MapRoute(
    "ControllerDefault",
    "{controller}/{id}",
    new { controller = "Page", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

然而,这干扰了MVC项目带来的默认"id"路由.有没有办法实现这个目标?

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

7
推荐指数
1
解决办法
2万
查看次数

我怎么可以添加整数列表到路由

我正在尝试将int []数组添加到我的Url.Action中,如下所示:

var routeData = new RouteValueDictionary();

for (int i = 0; i < Model.GroupsId.Length; i++) {
    routeData.Add("GroupsId[" + i + "]", Model.GroupsId[i]);
}
Run Code Online (Sandbox Code Playgroud)

在我看来:

Url.Action("Index", routeData)
Run Code Online (Sandbox Code Playgroud)

但在html我得到:

GroupsId%5B0%5D=1213&GroupsId%5B0%5D=1214
Run Code Online (Sandbox Code Playgroud)

并不是:

GroupsId=1213&GroupsId=1214
Run Code Online (Sandbox Code Playgroud)

我需要它,因为我有一个复选框列表,当我发布时我将groupIds绑定到int [],然后传递给我查看我有导出按钮的地方,其中Url.Action对我来说无法正常工作.

binding asp.net-mvc-routing url.action asp.net-mvc-3

7
推荐指数
1
解决办法
1274
查看次数

区分MVC 3中的Guid和字符串参数

使用ASP.NET MVC(3或4DP)中的开箱即用方法定位器,有没有办法让MVC框架区分字符串和Guid而无需解析控制器操作中的参数?

用法示例适用于URL

HTTP:// [域] /客户/信息/ F325A917-04F4-4562-B104-AF193C41FA78

执行

public ActionResult Details(Guid guid)
Run Code Online (Sandbox Code Playgroud)

方法,和

HTTP:// [域] /客户/信息/账单门

执行

public ActionResult Details(string id)
Run Code Online (Sandbox Code Playgroud)

方法.

没有任何变化,显然这些方法含糊不清,如下:

public ActionResult Details(Guid id)
{
    var model = Context.GetData(id);
    return View(model);
}

public ActionResult Details(string id)
{
    var model = Context.GetData(id);
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

导致错误:

The current request for action 'Details' on controller type 'DataController' is ambiguous between the following action methods:
System.Web.Mvc.ActionResult Details(System.Guid) on type Example.Web.Controllers.DataController
System.Web.Mvc.ActionResult Details(System.String) on type Example.Web.Controllers.DataController 
Run Code Online (Sandbox Code Playgroud)

我尝试使用自定义约束(基于如何创建System.Guid类型的路由约束?)尝试通过路由推送它:

routes.MapRoute(
    "Guid", …
Run Code Online (Sandbox Code Playgroud)

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

7
推荐指数
3
解决办法
1万
查看次数

无法在路径集合中查找路径名称

我收到此错误"在路径集合中找不到名为'MemberRoute'的路径.参数名称:name".这是我的Global.asax,

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "MemberRoute",                       // routeName
            "member/{userId}/{pseudoName}", // url
            new
            {                           // url defaults
                controller = "Member",
                action = "Index",
                userId = 0,
                pseudoName = UrlParameter.Optional
            },
            new
            {                          // url constraints
                userId = @"\d+" // must match url {userId}
            }
        );
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}
Run Code Online (Sandbox Code Playgroud)

MemberController,

public ActionResult Index(int userId, string pseudoName)
    {
        User user;
        var unitOfWork = new UnitOfWork();
        user …
Run Code Online (Sandbox Code Playgroud)

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

7
推荐指数
1
解决办法
2万
查看次数

在ASP.NET MVC 4中使用id路由到索引

我想维护ASP.NET MVC 4的现有控制器/动作/ id路由,默认控制器= Home和默认动作=索引,但是只要第二项不是,就可以使控制器/ id路由到控制器的索引方法一个已知的行动.

例如,给定一个带有动作索引和发送的控制器Home:

/Home/Send -> controller's Send method
/Home -> controller's Index method
/Home/Send/xyz -> controller's Send method with id = xyz
/Home/abc -> controller's Index method with id = abc
Run Code Online (Sandbox Code Playgroud)

但是,如果我先定义任一路线,它会隐藏另一条路线.我该怎么做?

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

7
推荐指数
2
解决办法
9548
查看次数

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
查看次数

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
查看次数

测试请求的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
查看次数