Tag: asp.net mvc routing

基于Http Header值的ASP.NET MVC5 / 6路由

假设我有一个最基本的控制器 public class HomeController : Controller { public ActionResult Index(string id, string language) { return View(); } } 其中包含2个参数。 但是,有一个要求是调用action方法的客户端应该从URL传递id值,而从http头传递language值。 这意味着url应该是/Home/Index/12345 ,同时调用客户端将设置一个Http Header值language : en 。 如何在MVC5或MVC6中设置路由以达到要求? 请不要提供Web Api的样本。 谢谢

HTTP错误403.14 – 禁止使用 – 带有IIS Express的MVC 4

这似乎是一个已经被多次询问/回答的问题。 不是。 开发环境: VS 2012和MVC 4.我使用内置的IIS Express来运行应用程序。 直到昨天才发生此错误。 它突然开始发生,我被卡住了。 奇怪的是它只发生在一个场景中。 当我尝试访问http://localhost:49962/managescholars/ ,它显示错误 HTTP Error 403.14 – Forbidden The Web server is configured to not list the contents of this directory. 但使用http://localhost:49962/managescholars/Index工作正常。 同一控制器的其他动作方法也可以正常工作。 例如http://localhost:49962/managescholars/create 。 所有其他控制器也可以正常工作。 我尝试将以下内容添加到web.config中。 我也试过以管理员身份运行以下命令 %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir 但它们都没有奏效。 编辑: 我修改了我的路线。 他们看起来如下。 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); routes.MapRoute( name: “ManageScholarLectures”, url: “Manage/Lectures/{userFriendlyName}”, […]

MVC MapPageRoute和ActionLink

我创建了一个页面路由,因此我可以将我的MVC应用程序与我项目中存在的一些WebForms页面集成: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); // register the report routes routes.MapPageRoute(“ReportTest”, “reports/test”, “~/WebForms/Test.aspx” ); routes.MapRoute( “Default”, // Route name “{controller}/{action}/{id}”, // URL with parameters new { controller = “Home”, action = “Index”, id = UrlParameter.Optional } ); } 每当我在我的视图中使用Html.ActionLink时,这就产生了一个问题: 当我在浏览器中加载页面时,链接显示如下: http://localhost:12345/reports/test?action=Index&controller=Home 有没有人遇到过这个? 我怎样才能解决这个问题?

ASP.NET MVC中的动态路由操作名称

我想创建一个到以下URL的动态路由: http://localhost:51577/Item/AnyActionName/Id 请注意,控制器名称是静态的,不需要是动态的。 另一方面,我需要动作名称部分是动态的,这样无论写入URL的那一部分,我都会将用户重定向到Item控制器内的Index动作。 到目前为止我尝试的是: public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute( “Items”, “Item/{action}/{id}”, new { controller = “Item”, action = “Index”, id = UrlParameter.Optional }); } 当我构建我的应用程序时,我收到以下错误: 无法找到该资源。 编辑 : 这是我的Global.asax文件和routeconfig.cs文件: public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } } 这是RouteConfig.cs文件的内容,其中RouteConfig.cs @Nkosi提供的答案: public class RouteConfig { public […]

测试请求的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; } } 问题是我无法从路由中提取URL。 我需要改变什么?

RedirectToAction和RedirectToRoute

在我的网页1控制器中,我想重定向到网页2,传递2个变量。 我尝试使用RedirectToRoute,但无法让它工作; 显示错误的URL。 然后我切换到使用RedirectToAction。 我的代码: 路由 routes.MapRoute( “CreateAdditionalPreviousNames”, // Route name “Users/{controller}/{action}/{userId}/{applicantId}”, // URL with parameters new { controller = “UsersAdditionalPreviousNames”, action = “Index”, userId = UrlParameter.Optional, applicantId = UrlParameter.Optional } // Parameter defaults ); RedirectToAction(有效) return RedirectToAction(“Index”, “UsersAdditionalPreviousNames”, new { userId = user.Id, applicantId = applicant.Id }); RedirectToRoute(不起作用) return RedirectToRoute(“CreateAdditionalPreviousNames”, new { userId = […]

动态修改RouteValueDictionary

作为这个问题的后续,我正在尝试实现自定义路由约束,以便为特定路由动态修改RouteValueDictionary 。 我95%的方式:我可以根据提供的参数模式匹配任何路由,匹配url中指定的操作。 此过程的最后一步是覆盖RouteValueDictionary以将键重命名为控制器操作的适当参数。 这是我的代码的相关片段(整个类几乎是300行,所以我不想添加所有的,但我可以,如果需要): public class CustomRouteConstraint : IRouteConstraint { public bool Match(HttpContextBase httpContext, Route route, string paramName, RouteValueDictionary values, RouteDirection routeDirection) { if (routeDirection.Equals(RouteDirection.UrlGeneration)) { return false; } //this will grab all of the “actual” parameters out of the RVD, excluding action and controller Dictionary unMappedList = values.Where(x => x.Key.Contains(“param”)).OrderBy(xi => xi.Key).ToDictionary( kvp […]

如何从URL或路径数据中获取控制器类型和操作信息?

在给定System.Web.Routing.RouteData ,如何获取将被调用的控制器操作(方法)和控制器类型? 我的情况是这样的 – 我希望能够在OnActionExecuting方法中执行某些操作(或不执行)以执行操作。 但是,我经常想要知道当前的行动,而不是被称为“根”行动; 通过这个我的意思是我可能有一个名为“登录”的视图,这是我的登录页面。 该视图可以包括另一个局部视图“LeftNav”。 当为LeftNav调用OnActionExecuting ,我希望能够确定它实际上是为Login的“root”aciton调用的。 我意识到通过调用RouteTable.Routes.GetRouteData(actionExecutingContext.HttpContext) ,我可以获得“root”请求的路由,但是如何将其转换为方法和类型信息? 到目前为止,我唯一的解决方案是: var routeData = RouteTable.Routes.GetRouteData(actionExecutingContext.HttpContext) var routeController = (string)routeData.Values[“controller”]; var routeAction = (string)routeData.Values[“action”]; 这个问题是“routeController”是删除了“Controller”后缀的控制器名称,并且不是完全限定的; 即它是“登录”,而不是“MyCode.Website.LoginController”。 如果可能的话,我宁愿得到一个实际的Type和MethodInfo ,或者至少是一个完全限定的类型名称。 有什么想法或替代方法吗? [ 编辑 – 这是ASP.Net MVC 1.0]

当url包含编码的&符号时,MVC WEB API路由失败

当我打电话给我的webservice时,我会得到两个参数: 从客户端(&)检测到潜在危险的Request.Path值。 Routeconfig: config.Routes.MapHttpRoute( name: “PropertiesSearch”, routeTemplate: “api/property/Search/{category}/{query}”, defaults: new { controller = “Property”, action = “Search”, category = “common”, query = string.Empty } ); Controllermethod: [HttpGet] public SearchResult Search(string category, string query) { } 当我打电话给api时: / API /属性/搜索/家庭/ areaID表示%3D20339%26areaId%3D20015 从客户端(&)检测到潜在危险的Request.Path值。 这样做: / API /属性/搜索/家庭/?查询= areaID表示%3D20339%26areaId%3D20015 工作良好。 如何解决路由解码问题?

根据请求从MVC web api返回xml或json

鉴于以下webapiconfig; config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional } ); 和这个控制器; public class ProductsController : ApiController { Product[] _products = new Product[] { new Product { Id = 1, Name = “Tomato Soup”, Category = “Groceries”, Price = 1 }, new Product { Id = 2, Name = “Yo-yo”, Category = […]