Tag: asp.net mvc routing

WebAPI 2属性路由,区域不起作用

我无法使WEBAPI 2属性路由工作。 我正在寻找的路由方案是/api/{product}/{controller}/{id-optional} ,所以就像/api/Vision/IdCard 。 控制器位于一个区域中,并设置如下: namespace DataServices.Controllers.Vision { [RoutePrefix(“api/vision”)] public class IdCardController : BaseApiController { [System.Web.Mvc.RequireHttps] [Route(“idcard”)] public IdCardViewModel Get(HttpRequestMessage request) {…} 每当我做到这一点,我得到一个404 。 我包含了命名空间,因为该区域位于其自己的命名空间中。 WEBAPI属性路由中是否支持区域? 编辑:WebApiConfig看起来像这样: config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional } );

具有一个固定动作的MVC路由和具有多个可选参数的控制器

基本上我有一个问题,我想在多个控制器中进行一个默认操作,并使用我的自定义URL使用多个可选参数,如下所示: www.mydomain.com/{controller name} / {v1} / {v2} / {v3} / {v4} 并且也不希望在url中使用动作名称。 我在routeconfig.cs中有这个路由 routes.MapRoute( name: “Blog”, url: “{controller}/{v1}/{v2}/{v3}/{v4}”, defaults: new { controller = “Blog”, action = “searchBlog”, v1 = UrlParameter.Optional, v2 = UrlParameter.Optional, v3 = UrlParameter.Optional, v4 = UrlParameter.Optional }); routes.MapRoute( name: “Forum”, url: “{controller}/{v1}/{v2}/{v3}/{v4}”, defaults: new { controller = “Forum”, action = “searchForum”, v1 […]

使用MVC 5 RouteArea属性时,无法找到默认区域视图

我有一个有多个领域的MVC5项目。 我有一个默认区域(名为Default ),在其中有一个默认控制器(名为DefaultController )。 这可以在现场路线上访问。 [RouteArea] public class DefaultController : Controller { [Route] public ActionResult Index() { return View(“Index”); } } public static void RegisterRoutes(RouteCollection routes) { routes.LowercaseUrls = true; routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); routes.MapMvcAttributeRoutes(); routes.MapRoute( name: “Default”, url: “{controller}/{action}/{id}”, defaults: new { controller = “Default”, action = “Index”, id = UrlParameter.Optional }, namespaces: new[] { “MyProject.Areas.Default.Controllers” } […]

如何使用会话基于主页的下拉选择重定向用户?

我的主页上有一个下拉列表,其中包含部门列表。现在我有几个页面显示基于部门选择和更改的记录列表。 因此,当用户从下拉列表中选择新部门时,我会向我的MVC控制器发出AJAX调用,并将部门ID发送到该控制器并将其存储在会话中,并在所有页面中使用该会话,因为我的所有页面都是由部门驱动的。 执行: @{ int departmentId = 0; int.TryParse(Convert.ToString(Session[“departmentId”]), out departmentId); } //filling dropdown based on departmentId $(document).ready(function () { $(“#department”).change(function () { var departmentId = $(this).val(); $.ajax({ url: “@Url.Action(“ChangeDepartment”, “Home”)”, data: { id: departmentId }, success: function (e) { if (‘@departmentId’ > 0) { if (window.location.pathname == ‘/Employee/Skill’) { window.location.href = ‘/Employee/Skill’; } else […]

MVC4:使用电子邮件作为参数进行URL路由

我有这个url在我的VS网络服务器上运行得非常好 http://localhost:4454/cms/account/edituser/email@domain.com (works) 但是当我将这个站点发布到IIS7.5时,它只会抛出404。 http://dev.test.com/cms/account/edituser/email@domian.com (does not work) 但如果删除电子邮件地址,就会发生奇怪的事情 http://dev.test.com/cms/account/edituser/email (works , no 404) 但如果我用查询字符串更改我的url,它可以正常工作 http://dev.test.com/cms/account/edituser?id=email@domain.com (works) 这是我的路线入口 routes.MapRoute( “Default”, // Route name “{controller}/{action}/{id}”, // URL with parameters new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }, // Parameter defaults new[] { “App.NameSpace.Web.Controllers” } ); 我注意到的奇怪的事情是,当服务器抛出404错误页面时,它是标准iis 404页面而不是我拥有的一个自定义页面。 所以我想知道我的路由映射有什么问题,或者IIS不喜欢有电子邮件作为参数的url。 但是我的当地开发人员一切正常。 谢谢

使用AttributeRouting隐藏URL中的区域

我们使用Areas来对使用AttributeRouting在ASP.NET MVC3中编写的API进行版本化以定义我们的路由。 现在我们有一个“v1”区域,这是我们的第一个API版本。 当我们到达v2时,我们将复制v1并进行修改。 我想对网站使用相同的版本,我不希望路由中的/ v1。 我的问题是,我如何隐藏我的URL中的区域,以便我可以打电话 mywebsite.com/Users/1 代替 mywebsite.com/v1/Users/1 这是我在控制器中的内容 [RouteArea(“/”)] public class HomeController : Controller { // // GET: /v1/Home/ [GET(“”)] public ActionResult Index() { return View(); } } 这是我尝试访问mywebsite.com/时得到的 提前致谢!

如何获取将在给定请求时调用的控制器操作的MethodInfo?

我有一个控制器和动作,负责处理403s,因为用户没有正确的角色。 它可以访问导致exception的原始RequestContext 。 我希望能够做的是用我们的行为描述装饰我的行为,然后允许用户通知他们的经理,请求访问,包括电子邮件中的描述。 那么, 在给出RequestContext , 如何确定将调用哪些操作? 显然,将控制器和动作名称从RouteData取出会更加复杂,因为通常会出现动作方法的重载等。 一旦我有MethodInfo那么很容易获得属性等。

子应用程序中的Asp.net MVC Catchall路由

我有一个MVC应用程序,其子应用程序在IIS中运行另一个MVC项目。 两者都使用相同的版本框架并在单独的应用程序池上运行。 我的问题是,我无法让子应用程序在根网站的这个虚拟应用程序文件夹中工作。 我收到403.14 Forbidden错误 。 如果我在子应用程序上启用目录列表,我只需获取MVC应用程序文件的列表。 我想,我已将问题缩小到路由; 子应用程序有一个自定义catchall路由,它处理对站点的所有请求,它是一个CMS应用程序。 没有注册其他路线。 这是我的自定义路线的代码: RouteTable.Routes.Insert(0,new CmsRoute( “{*path}”, new RouteValueDictionary(new { controller = “Page”, action = “Index” }), new MvcRouteHandler())); 在自己的站点中的主根应用程序之外运行此应用程序,它工作正常,所有请求都由我的自定义路由处理。 但是当我尝试将其作为子应用程序运行时,路由处理程序永远不会被命中。 如果我添加开箱即用的标准默认MVC路由: routes.MapRoute( name: “Default”, url: “{controller}/{action}/{id}”, defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional } ); 然后MVC启动并尝试为请求找到匹配路由。 所以我的问题是为什么我的catchall路由在IIS中的子应用程序中运行时不起作用? 注意:我尝试使用虚拟应用程序文件夹的名称为我的自定义路由中的url加前缀,但它仍然不起作用,例如: RouteTable.Routes.Insert(0,new CmsRoute( “subapplication/{*path}”, new […]

MVC 4:自定义路由和Html.Action不同步

所以我有这个自定义路由,它根据URL中的区域性设置路由表,但是当我调用Url.Action(…)时,它不会生成本地化的URL。 我有什么想法我做错了吗? 文化正在改变页面,我能够确定用户选择了哪种语言,但Url.Action没有生成本地化的URL。 这是自定义路由,它会更改路由表值(不确定是否采用这种标准方式): public class CultureRoute : Route { public CultureRoute(string url, object defaults, object contraints) : base(url, new MvcRouteHandler()) { base.Defaults = CreateRouteValueDictionary(defaults); base.Constraints = CreateRouteValueDictionary(contraints); } public override RouteData GetRouteData(HttpContextBase httpContext) { var routeData = base.GetRouteData(httpContext); if (routeData != null) { var culture = routeData.Values[“culture”].ToString(); var cookie = httpContext.Request.Cookies[“culture”]; var areEqual = […]

MVC 3路由和操作链接不遵循预期的上下文路由

我正在尝试做一个自定义路由,所以我可以在我的应用程序中使用选定的字符串作为前缀,并根据它进行一些处理。 我遇到的问题是,生成的操作链接不是基于它所存在的URL进行上下文化的。 路线: routes.MapRoute( “TestRoute”, “TEST/{controller}/{action}/{id}”, new { controller = “Space”, action = “Index”, id = UrlParameter.Optional }); routes.MapRoute( “Default”, “{controller}/{action}/{id}”, new { controller = “Space”, action = “Index”, id = UrlParameter.Optional }); 导航到TEST / Space / Index工作,以及Space / Index,但我需要修复的奇怪问题是,通过ActionLink生成的链接不服从它们被加载的上下文,至少对于{controller} / { action} / {id}默认路由。 在TEST / Space / Index列表下加载的页面链接正确,但是当加载/ Space / Index时,它们都引用了调用URL所没有的TEST /路由。 这是默认行为吗? […]