标签: asp.net-mvc-routing

ASP.NET MVC:如何"理解"遗留URL但不写入它们?

请原谅令人困惑的标题;)

我们已经构建了一个ASP.NET MVC应用程序来替换我们的"旧"ASP.NET webforms怪物.我们仍然希望支持那里使用的一些旧URL,因为它们仍然可以在某个地方的电子邮件等中浮动.

例如:我们的旧系统使用了URL~/Password.aspx,新MVC系统中的URL是〜/ Home/Password.

为了支持这些旧URL,我们只是将它们添加到路由表中,例如

    routes.MapRoute(
        "Password",
        "Password.aspx",
        new {
            controller = "Home",
            action = "Password",
            id = ""
        }
    );
Run Code Online (Sandbox Code Playgroud)

这很好用,但每当我们在代码中使用Url.Action("密码","主页")时,它会生成旧的URL("〜/ Password.aspx"而不是"〜/ Home/Password").由于我们想要慢慢淘汰旧的URL,如果MVC路由仍然"理解"旧URL但只使用/写入新URL,那将是很好的.

有没有办法实现这个目标?

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

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

如何在asp mvc中阻止访问Internet Explorer

我决定切断与Internet Explorer的联系,直到他们为一些常见的W3批准项目添加支持.即表格中的"多个"以及其他约5个......

因此,我想敦促我的访问者使用更好的浏览器.

有没有办法设置一个http处理程序或asax文件中的东西,以便将所有ie用户路由到自定义页面?

**编辑**

我知道我可以使用它来获取浏览器,我只是不知道如何使处理程序处理请求的标头然后重定向,如果它是IE

HttpContext.Request.Browser.Browser

asp.net-mvc internet-explorer asp.net-mvc-routing

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

在网址中没有控制器和操作的路由

如何配置ASP.NET MVC 3路由,以便它不需要URL中的控制器和操作?

我有这个显示项目"abc123"的详细信息,配置默认路由设置:

mysite.com/Home/Details/abc123
Run Code Online (Sandbox Code Playgroud)

值"abc123"是一个唯一值,Home控制器用它来查找数据库中的正确项.

但我宁愿让这些超短网址:

mysite.com/abc123
Run Code Online (Sandbox Code Playgroud)

该网站还将拥有极少数额外的控制器,例如"关于"和"联系".我假设我必须特别配置它们,因此默认控制器不会开始查找ID为"About"或"Contact"的项目的详细信息.我怎么做?

更新:

这是我的路线最终看起来像:

routes.MapRoute("About", "About", New With {.controller = "About", .action = "Index"})
routes.MapRoute("ID", "{id}", New With {.controller = "Home", .action = "Details"})
routes.MapRoute("Default", "", New With {.controller = "Home", .action = "Index"})
Run Code Online (Sandbox Code Playgroud)

:)

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

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

通过路由的ASP.NET MVC博客URL

假设我有一个新的MVC站点,我想以下列方式实现URL.从路由角度来看,最好的方法是什么?我将帖子存储在基本数据库表中.我想从控制器/动作的角度尽可能简单地保持它.

/ 2011 /(2011年所有帖子)

/ 2011/11 /(2011年11月起的所有帖子)

/ 2011/11/07(2011年11月7日起的所有帖子)

/ 2011/11/07/EXACT-后称号

/确切-后称号

/关于

/存档

/标签/任何标签

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

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

如何在asp.net mvc域名/用户名中进行路由,这样每个用户都有像facebook这样的"用户名"

如何在asp.net mvc域名/用户名中进行路由,这样每个用户都有像facebook这样的"用户名"

先感谢您!

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

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

具有多个前导零小数的属性路由

当前的ActionResult:

[Route("EvaluatorSetup/{evalYear}/{department}")]
public ActionResult RoutedEvaluatorSetup(int evalYear, string department)
{
    return EvaluatorSetup((int?)evalYear, department);
}
Run Code Online (Sandbox Code Playgroud)

我想用url:

/EvaluatorSetup/2014/001.3244
Run Code Online (Sandbox Code Playgroud)

但是,{department}最终是一个字符串,路由不会将{department}作为字符串.

答:我不知道MVC对"001.3244"的期望是什么类型,或者它正在捡起它的类型.

B.我想将它维护为带有可选前导零的字符串,如示例中所示.

我究竟做错了什么?

更新:

我的意思是,当我在返回线上的代码中断时,它永远不会触发.

/EvaluatorSetup/2014/foobar (WORKS!)

/EvaluatorSetup/2014/001.3244 (DOESN'T WORK!)
Run Code Online (Sandbox Code Playgroud)

这让我相信我的路由不正确:

[Route("EvaluatorSetup/{evalYear}/{department}")]
Run Code Online (Sandbox Code Playgroud)

具体来说,似乎001.3244似乎不是有效的字符串.所以我的问题是如何纠正这个问题:

[Route("EvaluatorSetup/{evalYear}/{department}")]
public ActionResult RoutedEvaluatorSetup(int evalYear, string department)
Run Code Online (Sandbox Code Playgroud)

所以我可以进入一个uri:

/EvaluatorSetup/2014/001.3244
Run Code Online (Sandbox Code Playgroud)

优选地,保持前导零的位置.

我想过这样的事情:

[Route("EvaluatorSetup/{evalYear}/{corporation}.{department}")]
Run Code Online (Sandbox Code Playgroud)

然而,这是猜测.我甚至不知道这是否有效.

补充更新:

RouteConfig.cs中的旧路由(似乎不再起作用)是这样的:

routes.MapRoute(
    "evaluations_evaluatorsetupget",
    "evaluations/evaluatorsetup/{evalyear}/{department}",
    new { controller = "evaluations", action = "evaluatorsetup", evalyear = @"^(\d{4})$", department = @"^(\d{3}\.\d{4})$" },
    new { evalyear = @"^(\d{4})$", department = @"^(\d{3}\.\d{4})$" }
    );
Run Code Online (Sandbox Code Playgroud)

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

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

在Routes mvc 4中添加公司名称

我一直在努力为Facebook这样的用户提供选项,以便在URL中添加他们的公司名称:

http://localhost:50753/MyCompany/Login
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的URL,但它没有用.

routes.MapRoute(
                name: "Default",
                url: "{companyName}/{controller}/{action}",
                defaults: new { controller = "Login", action = "Index"}
            );

routes.MapRoute(
               name: "Login",
               url: "{controller}/{action}/{id}",
               defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
           );
Run Code Online (Sandbox Code Playgroud)

现在,当我添加此路由以使其工作时,我的所有AJAX请求都会失败,而那些成功代表HTML而不是JSON.我注意到的是,由于这条路线,我的页面再次重新加载.

有人可以帮我弄清楚如何使用MVC路由(如果有可能,或者我是以错误的方式思考)?

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

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

控制器ASP.NET MVC中的子文件夹

在我的Controllers文件夹中,我想要一个名为Admin的子文件夹.

在此输入图像描述

当我去http:// localhost:port/Admin/Login /它说无法找到页面.

RouteConfig.cs

using System.Web.Mvc;
using System.Web.Routing;

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

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

MVC路由参数优先级

我遇到了一个我有默认MVC路由设置的场景.像所以.

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
Run Code Online (Sandbox Code Playgroud)

然后导航到这样的URL

domain/controller/action/1234
Run Code Online (Sandbox Code Playgroud)

在这个页面上,我然后导航到同一页面,但在某个事件之后使用不同的参数.像这样.

    var id = $(this).data("id");
    var url = "@Url.Action("action", "controller", new { area = ""})";
    var params = $.param({id: id, vrnsearch: true});
    var fullUrl = url += "?" + params;

    window.location.href = fullUrl;
Run Code Online (Sandbox Code Playgroud)

我注意到url仍然在url中保持相同的id并附加参数.

domain/controller/action/1234?id=4321&vrnsearch=true
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,有没有办法确定优先权是否应该使用url或参数中的id值.

我实际上通过使用下面的方法找到了解决我的问题的方法,它从网址中删除了id并只使用了参数.

@Url.Action("action","controller", new {id = "", area = ""})
Run Code Online (Sandbox Code Playgroud)

但是,如果参数vs url路由中有优先权,那就太好奇了.

asp.net-mvc url-routing asp.net-mvc-routing value-provider

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

Asp.net MVC 5 MapRoute的多个路由

我在RouteConfig中有3条路由:

routes.MapRoute(
    name: "ByGroupName",
    url: "catalog/{categoryname}/{groupname}",
    defaults: new { controller = "Catalog", action = "Catalog" }
);
routes.MapRoute(
    name: "ByCatName",
    url: "catalog/{categoryname}",
    defaults: new { controller = "Catalog", action = "Catalog" }
);
routes.MapRoute(
    name: "ByBrandId",
    url: "catalog/brand/{brandId}",
    defaults: new { controller = "Catalog", action = "Catalog" }
);
Run Code Online (Sandbox Code Playgroud)

这是我的动作控制器接收参数:

public ActionResult Catalog(
    string categoryName = null,
    string groupName = null,
    int pageNumber = 1,
    int orderBy = 5,
    int pageSize = 20,
    int brandId = 0,
    bool bundle = …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc asp.net-mvc-routing maproute asp.net-mvc-5

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