我觉得这很容易,但我完全不知所措.
我希望一个控制器的视图位于应用程序的根级别,而不是在该控制器的子目录中,但我无法弄明白.
我想要这两个网址:
/ Info - 这应该在控制器"Home"上操作"Info"
/ Admin/ - 这应该是控制器"Admin"上的操作"索引"(默认)
到目前为止,无论我尝试过什么,第一条路线最终都会捕捉到它们.我似乎无法将两者分开.
那个Info页面甚至不需要控制器,它是静态的,但我确实想要使用母版页.可能有一个更简单的方法来解决这个问题,但我也没想出来.
我能想到的就是创建一个Info控制器,并将Views/Home/Info移动到Views/Info/Index,但它有一定的气味.
我能够在rails中使用以下方法执行此操作:
map.connect ':controller/:action/:id'
map.connect ':action', :controller => 'home'
Run Code Online (Sandbox Code Playgroud) 由于某些宣传材料中的原则错误,我有一个网站收到了很多请求,这些请求应该是一个网站到达另一个网站.
即
有效的网站是http://site1.com/abc&http://site2.com/def但人们被告知要去http://site1.com/def.
我控制了site1但不控制site2.
site1包含用于检查路由的第一部分在actionfilter中是否有效的逻辑,如下所示:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if ((!filterContext.ActionParameters.ContainsKey("id"))
|| (!manager.WhiteLabelExists(filterContext.ActionParameters["id"].ToString())))
{
if (filterContext.ActionParameters["id"].ToString().ToLowerInvariant().Equals("def"))
{
filterContext.HttpContext.Response.Redirect("http://site2.com/def", true);
}
filterContext.Result = new ViewResult { ViewName = "NoWhiteLabel" };
filterContext.HttpContext.Response.Clear();
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何测试重定向到其他网站.
我已经有使用MvcContrib测试助手重定向到"NoWhiteLabel"的测试,但是这些情况无法处理(据我所见).
如何测试重定向到antoher站点?
[ActionName("about-us")]
public ActionResult EditDetails(int id)
{
// your code
}
Run Code Online (Sandbox Code Playgroud)
上面的操作适用于操作,但我希望能够为控制器执行相同(或类似),即在URL名称中也使用连字符.有没有简单的方法来实现这一点(我尝试了ActionName属性,但没有运气)
asp.net-mvc asp.net-mvc-routing asp.net-mvc-controller asp.net-mvc-2
我需要根据参数创建路由URL作为JSON返回值的一部分.
什么是Url.RouteUrl的等价物,但是要在控制器代码中使用,所以我可以在包含routeurl的Json结果中返回一个字符串.
我需要在控制器类之外完成,在一个单独的类中,这可以完成吗?
我想在我的CMS中为页面创建自定义slug,因此用户可以创建自己的SEO-urls(如Wordpress).
我以前通过"滥用"404路由在Ruby on Rails和PHP框架中执行此操作.无法找到请求的控制器时调用此路由,使我能够将用户路由到我的动态页面控制器以解析slug(如果没有找到页面,则从我将其重定向到真实404).这样,仅查询数据库以检查所请求的slug.
但是,在MVC中,仅当路由不适合默认路由时才会调用catch-all路由/{controller}/{action}/{id}.
为了仍然能够解析自定义slugs我修改了RouteConfig.cs文件:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
RegisterCustomRoutes(routes);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { Controller = "Pages", Action = "Index", id = UrlParameter.Optional }
);
}
public static void RegisterCustomRoutes(RouteCollection routes)
{
CMSContext db = new CMSContext();
List<Page> pages = db.Pages.ToList();
foreach (Page p in pages)
{
routes.MapRoute(
name: …Run Code Online (Sandbox Code Playgroud) 我有一个单独的部分(路线)我的网站,我想使用不同的布局/ CSS等.
因此,当我的网站主要部分的用户获得默认布局时.但是当他们登录并进入商店时,商店部分(路线)使用不同的布局/ css.
所以...
...都使用默认的_Layout
但...
...使用_LayoutStore
我已经看到这完成基于这里的角色(http://forums.asp.net/t/1653362.aspx/1)和这里(如何在MVC 3中使用多个布局?)但我不想去做.我需要根据客户的路线选择我的布局(也就是看他们在里面).
提前感谢您提供任何帮助.
asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-4
我有这条路线:
routes.MapRoute(
"News",
"News/{id}-{alias}",
new { controller = "News", action = "Show" },
new
{
id = @"^[0-9]+$"
},
namespaces: new[] { "Site.Controllers" }
);
Run Code Online (Sandbox Code Playgroud)
这条路线适用于这样的网址:
http://localhost:54010/News/6-news
Run Code Online (Sandbox Code Playgroud)
但不适用于这样的网址:
http://localhost:54010/News/6-nice-news
Run Code Online (Sandbox Code Playgroud)
如何在我的路由值“别名”中使用破折号?
已编辑
路线是这样的:
"News/{id}_{alias}"
Run Code Online (Sandbox Code Playgroud)
适用于两个网址:
http://localhost:54010/News/6_news
http://localhost:54010/News/6_nice-news
Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc routing asp.net-mvc-routing asp.net-mvc-3
我需要在我的ASP MVC应用程序中将两个可能包含斜杠的变量映射到控制器.让我们看一个例子.

例如,这些是有效的URL:
http://mysite/rep/Items
http://mysite/rep/module/Items/foo/bar/file.c
Run Code Online (Sandbox Code Playgroud)
有人可以就如何定义这条路线提出一些建议吗?
我在 .NET 4.6.1 上的 ASP.NET 4.5 上使用 ASP.NET MVC 5。
我有两个控制器:
FooController
FooIndexController
Run Code Online (Sandbox Code Playgroud)
这是因为 的 Index 操作Foo很复杂,所以我觉得它们最好在自己的单独Controller类中。
我正在使用基于属性的路由。我的 ASP.NET MVC 版本Order在RouteAttribute.
我有这些动作:
class FooController {
// Returns a view to allow editing of the Foo entity
[HttpGet]
[Route("~/{tenant}/foo/{fooName}", Order=2)]
public ActionResult Edit(String fooName, FooViewModel model) {
...
}
}
class FooIndexController {
// Returns a CSV file download listing all of the Foo entities
[HttpPost]
[Route("~/{tenant}/foo/csv", Order=1)]
public ActionResult IndexCsv() {
... …Run Code Online (Sandbox Code Playgroud) 我有以下路由属性:
[HttpGet("{id}/foo")]
Run Code Online (Sandbox Code Playgroud)
我的 id 是一个 base64 编码的值,因此,可能包含一个正斜杠。我用这个编码正斜杠%2F,不过,这似乎是ASP.NET MVC的核心解码URL,然后匹配的路线,因为我得到一个404,如果我的id包含%2F。
有什么办法可以允许%2F我的id?
我知道那里有一些答案(例如如何将 web api 2 路由与请求参数中的正斜杠匹配?),但是对于所有这些,有问题的参数总是最后一个,只有这样你才能使用通配符(?)。
asp.net-mvc ×10
c# ×2
routing ×2
.net ×1
asp.net ×1
asp.net-core ×1
controller ×1
unit-testing ×1