请原谅令人困惑的标题;)
我们已经构建了一个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,那将是很好的.
有没有办法实现这个目标?
我决定切断与Internet Explorer的联系,直到他们为一些常见的W3批准项目添加支持.即表格中的"多个"以及其他约5个......
因此,我想敦促我的访问者使用更好的浏览器.
有没有办法设置一个http处理程序或asax文件中的东西,以便将所有ie用户路由到自定义页面?
我知道我可以使用它来获取浏览器,我只是不知道如何使处理程序处理请求的标头然后重定向,如果它是IE
HttpContext.Request.Browser.Browser
如何配置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)
:)
假设我有一个新的MVC站点,我想以下列方式实现URL.从路由角度来看,最好的方法是什么?我将帖子存储在基本数据库表中.我想从控制器/动作的角度尽可能简单地保持它.
/ 2011 /(2011年所有帖子)
/ 2011/11 /(2011年11月起的所有帖子)
/ 2011/11/07(2011年11月7日起的所有帖子)
/ 2011/11/07/EXACT-后称号
/确切-后称号
/关于
/存档
/标签/任何标签
如何在asp.net mvc域名/用户名中进行路由,这样每个用户都有像facebook这样的"用户名"
先感谢您!
当前的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) 我一直在努力为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路由(如果有可能,或者我是以错误的方式思考)?
在我的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) 我遇到了一个我有默认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路由中有优先权,那就太好奇了.
我在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