Asp.net mvc 未找到与名为';用户';
我正在尝试导航到其URL为以下格式的页面: localhost:xxxxx/User/{id}/VerifyEmail?secretKey=xxxxxxxxxxxxx 我在Asp.net mvc 未找到与名为';用户';,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,asp.net-mvc-routing,asp.net-web-api-routing,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Asp.net Mvc Routing,Asp.net Web Api Routing,我正在尝试导航到其URL为以下格式的页面: localhost:xxxxx/User/{id}/VerifyEmail?secretKey=xxxxxxxxxxxxx 我在RouteConfig.cs文件中添加了一个新路由,因此我的RouteConfig.cs如下所示: public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.Igno
RouteConfig.cs
文件中添加了一个新路由,因此我的RouteConfig.cs
如下所示:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "VerifyEmail",
url: "User/{id}/VerifyEmail",
defaults: new { controller = "User", action = "VerifyEmail" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
}
config.Routes.MapHttpRoute(
name: "ControllersApi",
routeTemplate: "{controller}/{action}"
);
config.Routes.MapHttpRoute(
name: "ControllersApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
不幸的是,当尝试导航到该URL时,我会看到以下页面:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:52684/User/f2acc4d0-2e03-4d72-99b6-9b9b85bd661a/VerifyEmail?secretKey=e9bf3924-681c-4afc-a8b0-3fd58eba93fe'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'User'.
</MessageDetail>
</Error>
请告诉我我做错了什么?就我而言,在花了将近30分钟的时间试图解决问题后,我发现了问题的原因: 我在
WebApiConfig.cs
中定义的路线如下:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "VerifyEmail",
url: "User/{id}/VerifyEmail",
defaults: new { controller = "User", action = "VerifyEmail" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
}
config.Routes.MapHttpRoute(
name: "ControllersApi",
routeTemplate: "{controller}/{action}"
);
config.Routes.MapHttpRoute(
name: "ControllersApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
应该是这样的:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "VerifyEmail",
url: "User/{id}/VerifyEmail",
defaults: new { controller = "User", action = "VerifyEmail" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
}
config.Routes.MapHttpRoute(
name: "ControllersApi",
routeTemplate: "{controller}/{action}"
);
config.Routes.MapHttpRoute(
name: "ControllersApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
如您所见,它干扰了
RouteConfig.cs
中定义的标准路线。在我的情况下,控制器被定义为:
public class DocumentAPI : ApiController
{
}
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{*catchall}",
defaults: new { controller = "WarehouseController" }
将其更改为以下选项有效
public class DocumentAPIController : ApiController
{
}
类名必须以Controller结尾
编辑:正如@Corey Alix所建议的,请确保控制器具有公共访问修饰符;路由处理程序将忽略非公共控制器 在我的例子中,我想创建一个Web API控制器,但由于疏忽,我的控制器是从controller而不是ApicController继承的。在我的例子中,路由定义为:
public class DocumentAPI : ApiController
{
}
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{*catchall}",
defaults: new { controller = "WarehouseController" }
需要在配置中删除控制器时:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{*catchall}",
defaults: new { controller = "Warehouse" }
另一个解决方案是将控制器类权限设置为public 设置此选项:
class DocumentAPIController : ApiController
{
}
致:
经历过类似的问题。我们正在处理多个API,我们遇到了错误的端口号,并得到了这个错误。我们花了很长时间才意识到。确保您正在访问的api的端口是正确的端口。在我的例子中,我看到这一点是因为我有两个同名的控制器: 一个用于处理客户订单,称为
CustomersController
,另一个用于获取事件,也称为CustomersController
我错过了复制,我将events one重命名为
CustomerEventsController
,它工作得很好在我的例子中,我使用的是Web API,我没有为我的控制器类定义public
要检查Web API的内容:
- 控制器类声明为
public
- 控制器类实现ApiController
:ApiController
- 控制器类名称需要以
Controller
- 检查您的url是否有
前缀。例如,“主机:端口/api/{controller}/{actionMethod}”/api/
- 删除此路径下的所有文件(或在我的情况下,仅删除名为“MS ApiControllerTypeCache.xml”的任何文件):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ASP.NET临时文件\root
- 重新启动应用程序池
- 我也面临同样的问题。我搜索了很多,发现需要类级权限。默认情况下,类权限级别是内部的,所以我认为它不会影响程序的执行。但实际上它受到了影响,你应该给你的类公开的权限,这样你就不会面临任何问题
还有一个。如果是webapi项目,您的webapi routeconfig文件将覆盖routeconfig.cs文件设置。因此,请更新webapi routeconfig文件以使其正常工作。在我的解决方案中,我有一个名为“P420”的项目,在另一个项目中,我有一个P420控制器 当.NET剪切控制器名称以查找路由时,与其他项目冲突,用作库
希望有帮助。在我的解决方案中,当我将“我的新控制器”添加到项目中时,向导询问我是否要将控制器的位置设置到App_Code文件夹中。 向导警告我,如果我没有在App_Code文件夹中找到它,将找不到控制器类型。 但是我没有阅读整个警告,因为我想把文件定位到其他地方。。 这就是为什么它对我不起作用
在我添加了一个新的控制器并默认将其放在应用程序代码中之后,一切都正常了。面临着同样的问题。检查了这里的所有答案,但我的问题是名称空间。
路由属性存在于System.Web.Mvc和System.Web.Http中。我的使用包括Mvc名称空间,这就是原因。对于webapi,您需要使用System.Net.Http在我的例子中,我调用的APi类似于 虽然它应该是 从URL中删除了控制器,它开始工作
和平 在我的例子中,这是WebHostHttpControllerTypeResolver过度攻击性缓存的例子 修正:
信用证:还有一个很好的答案
在我的例子中,有人意外地添加了另一个项目作为引用,该项目引入了该项目的所有控制器,并导致路由冲突。删除它并将所需的代码移到一个更好的地方,在那里可以引用它,而无需引入所有控制器,这是解决方案。奇怪的是,错误以XML文档的形式返回。就好像你在使用ASP.NET Web API,它正在劫持这条路线。您正在使用ASP.NET Web API吗?如果是,它的路由定义是什么样子的?是的,我正在使用ASP.NET Web API,您可以在上面看到路由定义。否,请稍候。您似乎混淆了ASP.NET Web API和ASP.NET MVC。这是两种完全不同的技术。您在问题中展示的是ASP.NET MVC路由定义和控制器。ASP.NET Web API使用完全不同的堆栈。ASP.NET Web API控制器源于
ApiController
,而非Controller
,并且不会返回与您的问题相反的操作结果。我知道这一点。创建WEB API应用程序时,您将获得HomeController,它继承自Controller而非ApicController。我的问题不在于我的WEB API控制器。我让他们都很好地工作。问题是e