我有以下路线
routes.MapRoute(
"GigDayListings", // Route name
"gig/list/{year}/{month}/{day}", // URL with parameters
new { controller = "Gig", action = "List" },
new
{
year = @"^[0-9]+$",
month = @"^[0-9]+$",
day = @"^[0-9]+$"
} // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)
当我访问URL时
gig/list/2009/01/01
Run Code Online (Sandbox Code Playgroud)
这条路线完美匹配,我的行动被召唤.
在我看来,我有一个帮助器,它执行以下操作:
var urlHelper = new UrlHelper(ViewContext);
string url = urlHelper.RouteUrl(ViewContext.RouteData.Values);
Run Code Online (Sandbox Code Playgroud)
生成的字符串是:
http://localhost:3539/gig/list?year=2005&month=01&day=01
Run Code Online (Sandbox Code Playgroud)
为什么不呢
http://localhost:3539/gig/list/2005/01/01
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我想映射以下URI:
/admin/controller/action/id
Run Code Online (Sandbox Code Playgroud)
以下内容:
Controller -> Controller
Action -> Admin_Action
Run Code Online (Sandbox Code Playgroud)
例如:
/admin/Users/Create
Controller -> Users
Action -> Admin_Create
/admin/Users/Delete/1
Controller -> Users
Action -> Admin_Delete(1)
Run Code Online (Sandbox Code Playgroud)
我可以使用路由规则实现吗?
除了所有定义的 api 路由之外,我还想在 LegacyUriRedirect 操作中处理任何其他 url。
我试图将 routeTemplate 留空,但它只捕获根 url 并忽略任何带有段的 url。
如何更改以下代码以捕获所有包含任何段的 url?
config.Routes.MapHttpRoute(
name: "LegacyUriRedirect",
routeTemplate: "",
defaults: new { controller = "URI", action = "LegacyUriRedirect" }
);
Run Code Online (Sandbox Code Playgroud) 这是复制问题的程序。
将以下行添加到 RegisterRoutes() 方法中的“默认”路由之前
routes.MapRoute(
name: "Test",
url: "Test/{action}",
defaults: new { controller = "Test", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)将以下内容添加到 Index.cshtml 和 About.cshtml
@Html.RouteLink("link to TestController", "Test")
Run Code Online (Sandbox Code Playgroud)如您所见,生成的 html 代码对于 2 个页面是不同的。我希望 URL 是“/Test”,它为 Index.cshtml 正确呈现,但它成为 About.cshtml 的“/Test/About”。
我的问题是是否有任何记录的方法来生成相同的正确 URL。上面的例子只是为了演示目的而创建的。我想使用路由表信息来生成菜单。
我刚刚开始研究一个有几个区域的应用程序(基本网格主/系统细节类型......)我正在研究利用MVC中的漂亮路由功能(特别是4个)而我"只是没有得到它"我相信.
目前唯一定义的路线是基本路线:
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Account", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
这很好,它适用于我们定义的区域,所以我假设它必须知道用户在哪里,并根据用户所在的位置/区域上下文路由到相应的控制器..到目前为止很好..
现在,我正在尝试建立一条可以处理的新路线
/someController/someAction/{statusName}
Run Code Online (Sandbox Code Playgroud)
特别是:
/OrderManager/List/New
Run Code Online (Sandbox Code Playgroud)
和
/OrderManager/List/Viewed
Run Code Online (Sandbox Code Playgroud)
其中"新"是"新"状态,并且Action Signature看起来像:
public ActionResult List(string statusName)
Run Code Online (Sandbox Code Playgroud)
我假设我可以添加新的路由低于默认的路由标识"statusName"而不是Id,但当然,H将如何路由机制知道之间的区别:
/控制器1 /动作1/15
/控制器2 /动作2 /新
我确实尝试添加一个"静态"路径的形式
routes.MapRoute("Default",
"ControllerName/ControllerAction/{statusName}",
new { statusName = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我以为我可以"hiJack"只是一条路线,并做一些特殊的事情,但要知道有用,路由器在第一场比赛停止?我认为无论如何这是解决这个问题的错误方法..
所以现在我想要达到这样的想法:
/somecustomroutename/somesortValue
Run Code Online (Sandbox Code Playgroud)
恩./ OrderManagerList/viewNew
这些路线基本上是"别名".我原以为添加以下路线就可以了:
routes.MapRoute("Default_List",
"OrderManagerList/{statusName}",
new {controller="OrderManager", action="List", statusName= UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
与OrderManager控制器上的相关操作:
public ActionResult List(string statusName)
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么,参数都为null,或者"无法找到资源"
我知道控制器需要有一个相应的View文件..但这不是问题,问题是我尝试理解路由..
所以我的问题......从根本上说,我对MVC(4)中的路由缺少什么?甚至一些像我这样的傻瓜能够理解的好文章?
我的理解; 定义路线,并映射它的"端点"..然而,我想我不理解机器正在制造的假设.
无论如何,如果需要进一步解释/编辑,请告诉我..
提前致谢.
我正在尝试将Piranha CMS(v2.2.0)与现有的ASP.NET MVC应用程序集成.我可以运行所有原始应用程序页面和CMS管理器页面.我还可以看到由CMS管理的页面草稿,但是当我尝试查看从CMS托管的实时页面版本时,我收到HTTP 404"无法找到资源"消息.
以下草案网址有效:
http://localhost:5316/draft/start
Run Code Online (Sandbox Code Playgroud)
但是以下的实时网址失败了:
http://localhost:5316/home/start
Run Code Online (Sandbox Code Playgroud)
原始应用程序确实有一个"Home"控制器,我已经尝试将其重命名为"Test"以防出现冲突问题.我可以看到新的"测试"位于内容,但/ home/start url仍然失败.
据我所知,我的RouteConfig代码是:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "Maps.Portal.Controllers" }
).DataTokens["UseNamespaceFallback"] = false;
Run Code Online (Sandbox Code Playgroud)
我的web.config设置是:
<settings>
<managerNamespaces value="" />
<disableManager value="false" />
<passiveMode value="true" />
<prefixlessPermalinks value="false" />
</settings>
Run Code Online (Sandbox Code Playgroud)
我已经尝试将prefixlessPermalinks设置为true但这没有帮助.
我猜Piranha CMS没有捕捉自己托管的网页的路由?有任何想法吗?
我正在尝试为我的ASP.NET MVC 5项目设置一些路由.
现在我有一些奇怪的行为:
/Home/About 正确路由 /Home/Index 被路由到 /XmlRpc?action=Index&controller=Blog /HOme/Index 工作(是的,我发现由于一个错字) - 我一直认为路由不区分大小写?Url.Action("Foo","Bar")也创造/XmlRpc?action=Foo&controller=Bar这是我的RouteConfig档案:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add("XmlRpc", new Route("XmlRpc", new MetaWeblogRouteHandler()));
routes.MapRoute("Post", "Post/{year}/{month}/{day}/{id}", new {controller = "Blog", action = "Post"}, new {year = @"\d{4,4}", month = @"\d{1,2}", day = @"\d{1,2}", id = @"(\w+-?)*"});
routes.MapRoute("Posts on Day", "Post/{year}/{month}/{day}", new {controller = "Blog", action = "PostsOnDay"}, new {year = @"\d{4,4}", month = …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc iroutehandler asp.net-mvc-routing xml-rpc.net
我之前没有使用过.NET Routing.我有一个网址:http://myurl.com/Account/Login/?IsIPA=true.我希望能够使用以下内容点击此URL:http://myurl.com/IPA
这是我想要的唯一自定义路线.
我可以为这样的单个URL创建路由吗?
我的代码不起作用是:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute("IPA", "Account/Login/{IsIPA}", new { controller = "Account", action = "Login", IsIPA = "true" });
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
IsIPA具有路由模板的路由上的约束条目Account/Login/{IsIPA}=True必须具有字符串值或者是实现的类型System.Web.Routing.IRouteConstraint.
c# asp.net-mvc url-routing asp.net-mvc-routing asp.net-mvc-5
假设我有一个最基本的控制器
public class HomeController : Controller
{
public ActionResult Index(string id, string language)
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
其中包含2个参数.但是,有一个要求是调用action方法的客户端应该id从URL 传递值,但是language从http头传递值.这意味着url应该是/Home/Index/12345,同时调用客户端将设置Http Header值language : en.
如何在MVC5或MVC6中设置路由以达到要求?
请不要提供Web Api的样本.
谢谢
c# asp.net asp.net-mvc-routing asp.net-mvc-5 asp.net-core-mvc
我希望能够为我的网站创建一个简洁的特定于语言的默认URL,以便当有人浏览时:
somesite.com
他们被重定向到语言文化页面,例如:
具体来说,我不希望/ Home/Index附加到URL:
我致力于使用RouteLocalization.mvc创建此站点
我想在可行的范围内使用MVC属性路由.
我无法弄清楚如何使Start()方法重定向到特定于语言文化的URL而不添加像"index"这样的东西.
我试图遵循的样本:
using RouteLocalization.Mvc;
using RouteLocalization.Mvc.Extensions;
using RouteLocalization.Mvc.Setup;
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.Clear();
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes(Localization.LocalizationDirectRouteProvider);
const string en = "en-us";
ISet<string> acceptedCultures = new HashSet<string>() { en, "de", "fr", "es", "it" };
routes.Localization(configuration =>
{
configuration.DefaultCulture = en;
configuration.AcceptedCultures = acceptedCultures;
configuration.AttributeRouteProcessing = AttributeRouteProcessing.AddAsNeutralAndDefaultCultureRoute;
configuration.AddCultureAsRoutePrefix = true;
configuration.AddTranslationToSimiliarUrls = true;
}).TranslateInitialAttributeRoutes().Translate(localization …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc localization asp.net-mvc-routing asp.net-mvc-4
asp.net-mvc ×9
asp.net ×3
c# ×3
localization ×1
piranha-cms ×1
routelink ×1
routing ×1
url-routing ×1
urlhelper ×1
xml-rpc.net ×1