我已经建立了一个ASP.NET MVC项目,一切都运行良好,但我确实有一个路由问题.我的Global.asax看起来像这样:
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
Run Code Online (Sandbox Code Playgroud)
所以,没有什么不寻常的.我的问题是,当我使用HTML.ActionLink链接到控制器/ action/params时,如下所示:
<%= Html.ActionLink("My link", "SomeAction", "SomeController", new {param="someParam"})%>
Run Code Online (Sandbox Code Playgroud)
它应该产生(至少在我的头脑中有意义)一个链接,如:http://www.localhost/SomeController/SomeAction/someParam.
但它会生成这样的链接: http://localhost/SomeController/SomeAction?param=someParam
如果我手动创建链接到预期结果的链接(SomeController/SomeAction/someParam),则调用正确的控制器和操作,但action方法中定义的参数始终为null.
有任何想法吗?
我添加了3个控制器,对于其中一个控制器,默认情况下索引视图不起作用.
Works(shows index):
http://localhost:1767/Employees/
http://localhost:1767/Employees/Index
http://localhost:1767/Home/
http://localhost:1767/Home/Index
http://localhost:1767/
http://localhost:1767/Companies/Index
Doesn't work(gives 404 error):
http://localhost:1767/Companies/
Run Code Online (Sandbox Code Playgroud)
1)我创建了一个实体框架类库,它是从包含Employees和Companies表的数据库生成的.
2)创建了一个MVC 3空项目.
3)从MVC项目向EF类库项目添加了项目引用.
4)添加了一个控制器,在添加控制器对话框中,我选择了EF模型和其中一个表,并命名为控制器CompaniesController
5)然后我记得我需要一个HomeController,所以我添加了另一个控制器,命名为HomeController,并再次选择了公司实体.
6)最后,我添加了一个EmployeesController,选择了Employees实体.
这是我的Global.asax.cs中唯一的路线:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
Run Code Online (Sandbox Code Playgroud)
为什么http:// localhost:1767/Companies / URL不像所有其他控制器一样默认为索引操作?我做了一些练习MVC项目,似乎总是遇到这个问题.员工控制器默认为索引工作正常,即使没有路由告诉它这样做?
编辑:这是我收到的错误:
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, …Run Code Online (Sandbox Code Playgroud) model-view-controller asp.net-mvc asp.net-mvc-routing asp.net-mvc-3
我在设置路由到Orchard中的自定义控制器时遇到了一些麻烦.
我创建了一个视图:
@model dynamic
@{
Script.Require("jQuery");
}
@using (Html.BeginForm("Send", "Email", FormMethod.Post, new { id = "contactUsForm" }))
{
<fieldset>
<legend>Contact Us</legend>
<div class="editor-label">Name:</div>
<div class="editor-field">
@Html.TextBox("Name", "", new {style = "width: 200px"})
</div>
<div class="editor-label">Email Address:</div>
<div class="editor-field">
@Html.TextBox("Email", "", new {style = "width: 200px"})
</div>
<div class="editor-label">Telephone Number:</div>
<div class="editor-field">
@Html.TextBox("Telephone", "", new {style = "width: 200px"})
</div>
<div class="editor-label">Message:</div>
<div class="editor-field">
@Html.TextArea("Message", "", new {style = "width: 200px"})
</div>
<br/>
<input id="ContactUsSend" type="button" value="Submit" />
</fieldset>
}
@using …Run Code Online (Sandbox Code Playgroud) 我创建了一个带有Index动作的控制器.我的所有其他操作返回视图就好......但由于某种原因,我必须指定完整的URL以使索引视图返回.这几乎就像我的路线无法正常工作.
例如,要转到属性页面,您必须转到/ Properties/Index而不是/ Properties /.我的路线如下.任何帮助将不胜感激!
routes.MapRoute(
name: "Index",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud) 我有以下休息架构,我想使用ASP.NET Web Api实现:
http://mydomain/api/students
http://mydomain/api/students/s123
http://mydomain/api/students/s123/classes
http://mydomain/api/students/s123/classes/c456
Run Code Online (Sandbox Code Playgroud)
我使用ApiController和以下两种方法使前两个链接正常工作:
public class StudentsController : ApiController {
// GET api/students
public IEnumerable<Student> GetStudents() {
}
// GET api/students/5
public IEnumerable<Student> GetStudent(string id) {
}
}
Run Code Online (Sandbox Code Playgroud)
在同一个控制器中,(或者我需要一个名为ClassesController的不同控制器吗?),我该如何实现最后两个链接?另外,"类"部分的路由是什么样的(如果需要)?
这是我的WebApiConfig(我想保持动态,而不是硬编码到/ classes的路径,如果可能的话:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// EDIT - I'm getting 404's when trying to use this
context.Routes.MapHttpRoute(
name: "JobsApi",
routeTemplate: this.AreaName + "/Students/{id}/Classes/{classId}",
defaults: new { classId = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
编辑这是我新创建的ClassesController:
public class ClassesController : ApiController …Run Code Online (Sandbox Code Playgroud) 关于MVC和WebAPI中的路由的快速问题.我添加了路由config.cs的路由:
routes.MapRoute(
name: "ConfirmEmail",
url: "ConfirmEmail/{userid}",
defaults: new { controller = "Email", action = "ConfirmEmail" }
);
Run Code Online (Sandbox Code Playgroud)
这是按照正常情况在global.asax中注册的:
RouteConfig.RegisterRoutes(RouteTable.Routes);
Run Code Online (Sandbox Code Playgroud)
我正在尝试生成一个URL,以便在电子邮件中使用,该电子邮件是作为WebAPI控制器函数中的函数调用的一部分发送的.我正在使用UrlHelper.Link函数尝试生成一个URL,但是我收到一条错误,说明无法通过名称找到该路由:
var url = Url.Link("ConfirmEmail", new { userid = "someUserId" });
Run Code Online (Sandbox Code Playgroud)
现在我的印象是路由字典在MVC和WebAPI控制器上下文中共享但是我看不到传入Web API调用的路由字典中的MVC路由(在Request对象上),但是我已经定义了WebAPI路由.
我错过了什么吗?
asp.net-mvc asp.net-mvc-routing asp.net-web-api asp.net-web-api-routing asp.net-web-api2
one of my controller could not load "Index".for example :
http://localhost:51638/Reserve/
Run Code Online (Sandbox Code Playgroud)
doesn't work.but http://localhost:51638/Reserve/Index works.
and this problem is just for one of my controller and other is correct.
and my RouteConfig is:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// BotDetect requests must not be routed
routes.IgnoreRoute("{*botdetect}",
new { botdetect = @"(.*)BotDetectCaptcha\.ashx" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "UserHome", action = "Index", id = UrlParameter.Optional }
);
}
Run Code Online (Sandbox Code Playgroud)
after delete the controller and add …
以下是我整个网站中不同操作和视图的一些奇怪行为:
每当我POST一些动作方法并且Model.IsValid为false时,我都会返回视图.每当在返回的视图中调用Html.Action()时,我都会遇到以下异常:
(System.Web.HttpException): No matching action was found on controller 'xyz'.
This can happen when a controller uses RouteAttribute for routing,
but no action on that controller matches the request.
Run Code Online (Sandbox Code Playgroud)
我正在使用属性路由.
public class RouteConfig
{
// REGISTER ROUTES
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,即使Html.Action调用第一次在GET操作方法中返回View(),Html.Action总是在POST返回View()之后抛出此异常.这是我网站上的一般模式.
跆拳道?有什么想法在这里出了什么问题?我唯一能想到的是我随着时间的推移添加了更多的路线,现在它很困惑.如果是这样的话,我该如何修复或测试?
我刚想到我有很多路由/动作方法,其中动作方法的路径的get和post版本是相同的,除了action方法的GET或POST属性.我以前确定每条路线都是完全独特的,因为我得到了一些歧义,但是将其改回了相同的路线,用于获取和后置动作方法,唯一的区别是get或post属性......我变得确信它是路由问题,但我不知道具体是什么问题.我有数百种动作方法的路由属性.
我以前从未见过如此微妙的东西,甚至不知道如何开始解决这样的问题.我不知道它是简单还是复杂,如果它是我的代码或框架.任何帮助将不胜感激.
更新:
一些示例代码,不确定它会有所帮助,因为相同的事情发生在许多完全不同的操作方法和视图中的模式,无论GET,POST,授权,未授权,在角色与否,antiforgerytoken ...
从视图调用标准Html.Action.大多数时候工作正常.(不同的重载没有区别.)
@Html.Action("CategoryDropDowns", "Category")
Run Code Online (Sandbox Code Playgroud)
这是被调用的内容(确切地说返回的内容没有区别,可能是ViewResult,可能是一个int).
// GET: /category/category-drop-downs
[HttpGet]
[Route("category/category-drop-downs")]
public ViewResult CategoryDropDowns()
{
}
Run Code Online (Sandbox Code Playgroud)
如果验证失败,则返回视图:
public ActionResult CreateListing(ListDetails listDetails)
{
if (ModelState.IsValid)
{
}
else
{ …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc asp.net-mvc-routing attributerouting asp.net-mvc-5
我Attribute Routing在MVC4申请中使用.我已设定路线[Route("test-{testParam1}-{testParam2}")].这里`{testParam2}'可能包含'test'这个词.例如,如果我输入如下的网址,
localhost:33333/test-temp-test-tempparam2
Run Code Online (Sandbox Code Playgroud)
这给了我404错误.在url中,这里{testParam2}有两个单词test tempparam2格式化为test-tempparam2.当test单词位于最后位置时{testParam2},它运行良好.这意味着如果网址像.../test-temp-tempParam2-test运行良好.但是下面给出错误..../test-temp-test-tempParam2.
以下是可能有帮助的代码......
[Route ("test-{testParam1}-{testParam2}")]
public ActionResult Foo (int testParam2) {...}
Run Code Online (Sandbox Code Playgroud)
现在尝试关注两个网址.
localhost:(port)/test-temp-1
localhost:(port)/test-test-temp-1
在我的情况下,第二个错误.在这种情况下第一参数被格式化为test-temp从test temp.首先运行良好.
如何解决这个问题呢?
我在我的ASP.NET Core SPA中使用命名路由,如下所示:
[HttpGet("", Name = HomeControllerRouteName.GetIndex)]
public IActionResult Index() => this.View();
Run Code Online (Sandbox Code Playgroud)
在我Startup.cs使用该MapSpaFallbackRoute方法回退到单页面应用程序以显示404错误页面.它目前使用控制器和操作名称来确定后备路由,如下所示:
application.UseMvc(
routes =>
{
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
Run Code Online (Sandbox Code Playgroud)
Startup.cs为了保持一致性,我想在命令路由中使用命名路由.怎么能实现这一目标?
asp.net asp.net-mvc-routing single-page-application asp.net-core-mvc asp.net-core