我有一个非常奇怪的问题,我无法弄清楚。我不是路由专家,但这应该很简单。
我有一个名为 NewsletterController 的控制器,它具有典型的 Index ActionResult。如果我在调试模式下运行我的网站并使用链接转到我的新闻通讯部分,我会收到一条403.14 Forbidden消息。如果我将“Index”添加到路线中,那么它将很好地转到 ActionResult。我以完全相同的方式使用 Index ActionResult 设置了其他控制器,并且工作得很好。这是关于这个特定控制器无法工作的问题,我只是不明白问题是什么。
这是我的控制器代码:
public class NewsletterController : Controller
{
public ActionResult Index()
{
var vm = new NewsletterViewModel();
...CODE REMOVED FOR SPACE
return View(vm);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 _Layout.cshtml 中的操作链接:
@Html.ActionLink("Newsletters", "Index", "Newsletter", null, new { @class = "nav-link" })
Run Code Online (Sandbox Code Playgroud)
我的路由类
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) 目标:在运行 ASP.NET Core 2.2 Web 应用程序时尽快在浏览器中获取 URL。
我尝试过几乎所有类型的黑客攻击Startup.cs,当然你可以使用 DI 来注册IHttpContextAccessor以访问HttpContext
有人会说用
var url = HttpContext?.Request?.GetDisplayUrl();
Run Code Online (Sandbox Code Playgroud)
您可以在控制器中使用它,但是如果您查看定义,您会发现 HttpContext 来自 Mvc 的 ControllerBase 等。
似乎有几个关于此的帖子,但没有解决方案。
Invoke方法,但是如何和在哪里等..? ASPCore 中间件中的当前 URL?我看到该程序使用.UseStartup<Startup>();
Is it possible to get access to be able to END GOAL 来调用 Startup.cs 来获取 URL,例如 http://localhost:4444
我所想要的 ...
var url = HttpContext?.Request?.GetDisplayUrl();
Run Code Online (Sandbox Code Playgroud)
一旦 .net core 在类库/startup/program.cs 中显示我的 URL,就会让我看到类似的 URLhttp://localhost:4444
c# url-routing asp.net-mvc-routing asp.net-core-mvc asp.net-core
如何从 ASP.NET MVC Core 3.1 Web 应用程序中的页面 URL 中删除“Home”控制器路径?
而不是渲染这个 URL ...
www.mysite.com/Home/About
Run Code Online (Sandbox Code Playgroud)
...我想看到这个:
www.mysite.com/About
Run Code Online (Sandbox Code Playgroud)
目前,我正在使用 ASP.NET Core 3.1 将旧的 MVC .NET Web 应用程序从 Visual Studio 2013 (.NET Framework 4.7.2) 迁移到 Visual Studio Code。我之前的应用程序注册了这个路由,从而产生了如上所示的效果。
routes.MapRoute(
name: "RemoveHomeFromURL",
url: "{action}",
defaults: new { controller = "Home", action = "Index" },
namespaces: new[] { "MyWebsite.Controllers" }
);
Run Code Online (Sandbox Code Playgroud)
我希望在这个新的 ASP.NET Core Web 应用程序中获得类似的结果。我在 Startup.cs 中定义了这些端点:
app.UseEndpoints(endpoints =>
{
endpoints.MapAreaControllerRoute(
name: "AreaA",
areaName: "AreaA",
pattern: "AreaA/{controller=Home}/{action=Index}/{id?}");
endpoints.MapAreaControllerRoute(
name: "AreaZ",
areaName: "AreaZ",
pattern: "AreaZ/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute( …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中有2个视图
1:视图 - >来临吧> ViewSeason
alt text http://img102.imageshack.us/img102/9207/viewsseasonsx4.jpg
2:视图 - >管理 - >来临吧> ViewSeason
alt text http://img242.imageshack.us/img242/1911/viewsadminsr4.jpg
我怎么写Controller呢?请帮助我.....
我只是在学习MVC,并想在我的网站上添加一些自定义路由.
我的网站被拆分为品牌,因此在访问网站的其他部分之前,用户将选择一个品牌.我没有将所选品牌存储在某个地方或将其作为参数传递,而是希望将其作为URL的一部分,以便访问NewsControllers索引操作,而不是"mysite.com/news"我想使用"mysite.com" /品牌/新闻/".
我真的想添加一条路线,说明如果一个URL有品牌,就像正常一样去控制器/行动并通过品牌......这可能吗?
谢谢
C
//standard routing
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
//the custom route I added
routes.Add(
new Route("Fish/Image",
new ImageHandlerRouteHandler()
)
);
Run Code Online (Sandbox Code Playgroud)
我认为这会使用我,ImageHandlerRouteHandler但我得到的Fish/Image只是404.
我已将所有管理员控制器放在Controller文件夹中的Admin文件夹中.由于我的一个管理员控制器匹配Controller文件夹中另一个控制器的名称,我收到以下错误.
找到了多个与名为"Product"的控制器匹配的类型.如果为此请求提供服务的路由('{controller}/{action}/{id}')未指定名称空间来搜索与请求匹配的控制器,则会发生这种情况.如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由.
我尝试添加以下路由,但问题仍然相同
routes.MapRoute(
"", //Route name
"Admin/{controller}/{action}/{id}", // Url with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
Run Code Online (Sandbox Code Playgroud)
我怎样才能摆脱这个错误.改变控制器的名称是我心中的最后一个选择.现在,我正在寻找一种保存名称的方法,看看我是否能找到另一种方法.
我有生成链接的问题我有一个名为"管理"的区域,它还有一个HomeController作为根,在主页
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Admin", "Index", "Home", new {area = "Administration"})</li>
Run Code Online (Sandbox Code Playgroud)
此外,我继承了From Route,方法GetVirtualPath接受省略区域键的参数值,并仅传递控制器和操作.
我哪里做错了?
asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-4
在我的MVC和WebAPI应用程序中,我看到了两种不同的路由方式.
对于WebAPI:
WebApiConfig.CustomizeConfig(GlobalConfiguration.Configuration);
public static void Register(System.Web.Http.HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: ApiControllerOnly,
routeTemplate: "api/{controller}");
}
Run Code Online (Sandbox Code Playgroud)
对于MVC:
RouteConfig.RegisterRoutes(RouteTable.Routes);
public static void RegisterRoutes(System.Web.Routing.RouteCollection routes)
{
routes.MapRoute("DefaultRedirect",
"",
new { controller = "Home", action = "Index" });
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下我在一个或另一个方法调用中注册路由有什么不同吗?另外,为什么一个人使用这种方式.
c# asp.net-mvc asp.net-mvc-routing asp.net-web-api asp.net-web-api-routing
我正在看看ASP.NET 5和MVC 6,我正在使用默认的启动器模板.我现在已经建立了一个区域,我希望有一个"HomeController".因此,默认的HomeController不会放在一个区域中,然后在Areas/MyArea中会有HomeController.
Startup.cs中的以下配置显然不起作用:
routes.MapRoute(
name: "areaRoute",
template: "{area:exists}/{controller}/{action}",
defaults: new { controller = "Home", action = "Index" });
routes.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action = "Index" });
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误信息:
AmbiguousActionException:匹配多个动作.以下操作匹配路由数据并满足所有约束:
MyProject.Controllers.HomeController.Index MyProject.Areas.MyArea.Controllers.HomeController.Index
在早期的MVC版本中,您应该能够通过在路由配置中定义名称空间来解决它,如本博客文章中所述:http://blog.falafel.com/duplicate-controller-names-aspnet-mvc-areas/
虽然这不适合我.如果我添加namespaces: new string[] { "MyProject.Controllers" }到默认路由,我收到以下错误:
错误CS1501方法'MapRoute'没有重载需要4个参数MyProject.ASP.NET 5.0 Startup.cs 81
如果我能就此得到一些建议,我将非常感激,能够在我的系统中使用多个HomeController会很高兴.