Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 未找到与名为';用户';_Asp.net Mvc_Asp.net Mvc 4_Asp.net Web Api_Asp.net Mvc Routing_Asp.net Web Api Routing - Fatal编程技术网

Asp.net mvc 未找到与名为';用户';

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

我正在尝试导航到其URL为以下格式的页面: localhost:xxxxx/User/{id}/VerifyEmail?secretKey=xxxxxxxxxxxxx

我在
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/
    前缀。例如,“主机:端口/api/{controller}/{actionMethod}”

    • 我也面临同样的问题。我搜索了很多,发现需要类级权限。默认情况下,类权限级别是内部的,所以我认为它不会影响程序的执行。但实际上它受到了影响,你应该给你的类公开的权限,这样你就不会面临任何问题


      还有一个。如果是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过度攻击性缓存的例子

      修正:

    • 删除此路径下的所有文件(或在我的情况下,仅删除名为“MS ApiControllerTypeCache.xml”的任何文件):

      C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ASP.NET临时文件\root

    • 重新启动应用程序池


    • 信用证:

      还有一个很好的答案


      在我的例子中,有人意外地添加了另一个项目作为引用,该项目引入了该项目的所有控制器,并导致路由冲突。删除它并将所需的代码移到一个更好的地方,在那里可以引用它,而无需引入所有控制器,这是解决方案。

      奇怪的是,错误以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