Asp.net-Mvc

找不到與名為“使用者”的控制器匹配的類型

  • July 23, 2013

我正在嘗試導航到其 URL 採用以下格式的頁面:localhost:xxxxx/User/{id}/VerifyEmail?secretKey=xxxxxxxxxxxxxxx

我在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 }
       );
   }
}

不幸的是,當我嘗試導航到該 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>

這是我的使用者控制器:

public class UserController : Controller
{

   // GET      /User/{id}/VerifyEmail
   [HttpGet]
   public ActionResult VerifyEmail(string id, string secretKey)
   {
       try
       {
           User user = UsersBL.Instance.Verify(id, secretKey);
           //logger.Debug(String.Format("User %s just signed-in in by email.",
               user.DebugDescription()));
       }
       catch (Exception e)
       {
           throw new Exception("Failed", e);
       }
       return View();
   }
}

請告訴我我做錯了什麼?

就我而言,在花了將近 30 分鐘試圖解決問題後,我發現了導致它的原因:

我定義的路線WebApiConfig.cs是這樣的:

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
   {
   }

將其更改為以下工作!

   public class DocumentAPIController : ApiController
   {
   }

類名必須以Controller結尾!

編輯:正如@Corey Alix 所建議的,請確保控制器具有公共訪問修飾符;路由處理程序忽略非公共控制器!

引用自:https://stackoverflow.com/questions/17811142