标签: asp.net-mvc-routing

ASP.NET MVC路由根级别视图

我觉得这很容易,但我完全不知所措.

我希望一个控制器的视图位于应用程序的根级别,而不是在该控制器的子目录中,但我无法弄明白.

我想要这两个网址:

/ Info - 这应该在控制器"Home"上操作"Info"

/ Admin/ - 这应该是控制器"Admin"上的操作"索引"(默认)

到目前为止,无论我尝试过什么,第一条路线最终都会捕捉到它们.我似乎无法将两者分开.

那个Info页面甚至不需要控制器,它是静态的,但我确实想要使用母版页.可能有一个更简单的方法来解决这个问题,但我也没想出来.

我能想到的就是创建一个Info控制器,并将Views/Home/Info移动到Views/Info/Index,但它有一定的气味.

我能够在rails中使用以下方法执行此操作:

  map.connect ':controller/:action/:id'
  map.connect ':action', :controller => 'home'
Run Code Online (Sandbox Code Playgroud)

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

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

如何测试ASP.NET MVC路由重定向到其他站点?

由于某些宣传材料中的原则错误,我有一个网站收到了很多请求,这些请求应该是一个网站到达另一个网站.

有效的网站是http://site1.com/abc&http://site2.com/def但人们被告知要去http://site1.com/def.

我控制了site1但不控制site2.

site1包含用于检查路由的第一部分在actionfilter中是否有效的逻辑,如下所示:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);

    if ((!filterContext.ActionParameters.ContainsKey("id")) 
     || (!manager.WhiteLabelExists(filterContext.ActionParameters["id"].ToString())))
    {
        if (filterContext.ActionParameters["id"].ToString().ToLowerInvariant().Equals("def"))
        {
            filterContext.HttpContext.Response.Redirect("http://site2.com/def", true);
        }

        filterContext.Result = new ViewResult { ViewName = "NoWhiteLabel" };
        filterContext.HttpContext.Response.Clear();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何测试重定向到其他网站.
我已经有使用MvcContrib测试助手重定向到"NoWhiteLabel"的测试,但是这些情况无法处理(据我所见).

如何测试重定向到antoher站点?

asp.net-mvc routing unit-testing asp.net-mvc-routing

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

允许在asp.net mvc 2控制器名称的URL中使用连字符

[ActionName("about-us")]
public ActionResult EditDetails(int id)
{
    // your code
}
Run Code Online (Sandbox Code Playgroud)

上面的操作适用于操作,但我希望能够为控制器执行相同(或类似),即在URL名称中也使用连字符.有没有简单的方法来实现这一点(我尝试了ActionName属性,但没有运气)

asp.net-mvc asp.net-mvc-routing asp.net-mvc-controller asp.net-mvc-2

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

ViewModel中的MVC3 RouteUrl

我需要根据参数创建路由URL作为JSON返回值的一部分.

什么是Url.RouteUrl的等价物,但是要在控制器代码中使用,所以我可以在包含routeurl的Json结果中返回一个字符串.

我需要在控制器类之外完成,在一个单独的类中,这可以完成吗?

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

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

ASP.NET MVC:在不影响性能的情况下路由自定义slug

我想在我的CMS中为页面创建自定义slug,因此用户可以创建自己的SEO-urls(如Wordpress).

我以前通过"滥用"404路由在Ruby on Rails和PHP框架中执行此操作.无法找到请求的控制器时调用此路由,使我能够将用户路由到我的动态页面控制器以解析slug(如果没有找到页面,则从我将其重定向到真实404).这样,仅查询数据库以检查所请求的slug.

但是,在MVC中,仅当路由不适合默认路由时才会调用catch-all路由/{controller}/{action}/{id}.

为了仍然能够解析自定义slugs我修改了RouteConfig.cs文件:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        RegisterCustomRoutes(routes);

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { Controller = "Pages", Action = "Index", id = UrlParameter.Optional }
        );
    }

    public static void RegisterCustomRoutes(RouteCollection routes)
    {
        CMSContext db = new CMSContext();
        List<Page> pages = db.Pages.ToList();
        foreach (Page p in pages)
        {
            routes.MapRoute(
                name: …
Run Code Online (Sandbox Code Playgroud)

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

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

是否可以在基于路由的MVC4中使用不同的布局?

我有一个单独的部分(路线)我的网站,我想使用不同的布局/ CSS等.

因此,当我的网站主要部分的用户获得默认布局时.但是当他们登录并进入商店时,商店部分(路线)使用不同的布局/ css.

所以...

  • www.blahblahblah.com/
  • www.blahblahblah.com/admin/
  • www.blahblahblah.com/home/contactus/

...都使用默认的_Layout

但...

  • www.blahblahblah.com/store/
  • www.blahblahblah.com/store/admin/

...使用_LayoutStore

我已经看到这完成基于这里的角色(http://forums.asp.net/t/1653362.aspx/1)和这里(如何在MVC 3中使用多个布局?)但我不想去做.我需要根据客户的路线选择我的布局(也就是看他们在里面).

提前感谢您提供任何帮助.

asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-4

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

带破折号的路由值

我有这条路线:

            routes.MapRoute(
            "News",
            "News/{id}-{alias}",
            new { controller = "News", action = "Show" },
            new
                {
                    id = @"^[0-9]+$"
                },
            namespaces: new[] { "Site.Controllers" }
        );
Run Code Online (Sandbox Code Playgroud)

这条路线适用于这样的网址:

http://localhost:54010/News/6-news
Run Code Online (Sandbox Code Playgroud)

但不适用于这样的网址:

http://localhost:54010/News/6-nice-news
Run Code Online (Sandbox Code Playgroud)

如何在我的路由值“别名”中使用破折号?

已编辑

路线是这样的:

"News/{id}_{alias}"
Run Code Online (Sandbox Code Playgroud)

适用于两个网址:

http://localhost:54010/News/6_news
http://localhost:54010/News/6_nice-news
Run Code Online (Sandbox Code Playgroud)

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

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

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

基于属性的路由和顺序

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

ASP.NET Core MVC:包含 %2F(正斜杠)的路由参数有问题

我有以下路由属性:

[HttpGet("{id}/foo")]
Run Code Online (Sandbox Code Playgroud)

我的 id 是一个 base64 编码的值,因此,可能包含一个正斜杠。我用这个编码正斜杠%2F,不过,这似乎是ASP.NET MVC的核心解码URL,然后匹配的路线,因为我得到一个404,如果我的id包含%2F

有什么办法可以允许%2F我的id

我知道那里有一些答案(例如如何将 web api 2 路由与请求参数中的正斜杠匹配?),但是对于所有这些,有问题的参数总是最后一个,只有这样你才能使用通配符(?)。

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

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