我在破坏我的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”
请任何人提出过来这个错误的想法。
如果我在这里做错了,请告诉我。
提前致谢。
答案 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()
{
}
}
然后,您可以使用Ajax
或PostMan
生成对该操作的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;
}
}