没有找到与asp.net网站项目中指定的控制器匹配的类型

时间:2016-04-19 06:00:29

标签: c# asp.net asp.net-web-api asp.net-web-api-routing

我在破坏我的asp.net网站项目时面临以下错误。

错误: 未找到与名为“XXXX”的控制器匹配的类型。

路线配置:

 void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
   // AuthConfig.RegisterOpenAuth();
    RouteConfig.RegisterRoutes(RouteTable.Routes);

    System.Web.Http.GlobalConfiguration.Configuration.Routes.MapHttpRoute(
           name: "DefaultApi",
           routeTemplate: "api/{controller}/{action}/{id}",
           defaults: new { id = System.Web.Http.RouteParameter.Optional });
}

WebApi控制器:

  public class SampleWebController : ApiController
{
    public object SampleAction(Dictionary<string, string> jsonResult)
    {

    }
 }

网址:ServiceUrl =“../ api / SampleWeb”

请任何人提出过来这个错误的想法。

如果我在这里做错了,请告诉我。

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果在同一个控制器中有多个POST操作,则应该像这样进行Route Config:

System.Web.Http.GlobalConfiguration.Configuration.Routes.MapHttpRoute(
           name: "DefaultApi",
           routeTemplate: "{controller}/{action}/{id}",
           defaults: new { id = System.Web.Http.RouteParameter.Optional });

然后在你的控制器中你可以有多个GET和POST方法

  public class TestController : ApiController
  {
         [ActionName("PostMe")]
         public object PostMe()
         {
         }

         [ActionName("PostMeTwo")]
         public object PostMeTwo()
         {

         }

        [HttpGet]
        public object TestGet()
        {

        }
  }

然后,您可以使用AjaxPostMan生成对该操作的POST请求,如下所示:

localhost:XXXX/Test/PostMe

其中Test是控制器的名称,PostMe操作名称 - 两者都是必需的

localhost:XXXX/Test/PostMeTwo[POST]
localhost:XXXX/Test/TestGet [GET]

答案 1 :(得分:0)

您有2个选项。

第一个选项,为控制器添加操作名称

add [Text+X], 1

你会称之为&#34; ../ api / SampleWeb / SampleAction&#34;

这样您就不需要更改路线配置

第二个选项,将您的路线配置更改为

public class SampleWebController : ApiController
{
    [ActionName("SampleAction")]
    public object SampleAction(Dictionary<string, string> jsonResult)
    {

    }
 }

和你的方法

routeTemplate: "api/{controller}/{id}",

然后您可以拨打&#39; ../ api / SampleWeb&#39;如果你要提出请求。

注意:如果您要在同一个控制器中有多个gets,posts,puts等,请使用第一个选项。如果你只为每个控制器计划一次获取,发布,放置等,那么选项2就更清晰了。

编辑:要测试选项1,请将方法更改为

public class SampleWebController : ApiController
{
    [HttpGet]
    public object GetSampleAction(Dictionary<string, string> jsonResult)
    {

    }
 }

并称你为api ...&#39; ... / api / SampleWeb / SampleAction / 10&#39;。如果这有效,则意味着您传递给SampleAction的数据无法转换为字典,这就是您的问题,而不是webapi或您的路由。确保您的路线配置仍然是

public class SampleWebController : ApiController
{
    [ActionName("SampleAction")]
    public object SampleAction(int id)
    {
        return id;
    }
 }