【发布时间】:2018-08-29 19:40:15
【问题描述】:
对此进行了大量阅读,但没有现有的修复对我有用。 我正在尝试从 apiClient 项目中访问 api 端点,但我不断收到错误消息:在与请求匹配的控制器“UserApi”上未找到任何操作。 我能够调试到 api 控制器,但它不会命中方法。
客户:
public async Task<bool> UserExists(UserDto dto)
{
var postUrl = $"{BaseUri}UserApi/user-exists";
var json = await PostAsync(new Uri(postUrl), dto);
return JsonConvert.DeserializeObject<bool>(json);
}
API 控制器:
[Route("api/UserApi")]
public class UserApiController : ApiController
{
public UserApiController()
{
}
[HttpPost]
[Route("user-exists")]
public async Task<bool> UserExists([FromBody]UserDto dto)
{
return true;
}
路线配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapHttpRoute(
name: "ApiAction",
routeTemplate: "api/{controller}/{action}/{dto}",
defaults: new { dto = UrlParameter.Optional }
);
}
底部路由配置是我正在尝试使用的配置。任何帮助表示赞赏
【问题讨论】:
-
我很困惑。您声明您正在尝试使用在 RegisterRoutes 中声明的路由。但是您也使用属性路由。你想用哪个?如果你想要属性路由,为什么不按照in the documentation 的描述调用 MapHttpAttributeRoutes?
-
对不起,这是我第一次自己设置路由,我以为我必须应用属性,而 RegisterRoutes 只是用于定义要查找的路由的格式?跨度>
-
因此在文档中它指出:属性路由可以与基于约定的路由相结合。要定义基于约定的路由,请调用 MapHttpRoute 方法。这是我尝试设置的方式
-
您需要决定使用哪个。您可以同时将它们用于不同的路线。但不是同一条路线。如果您打算使用属性路由,请不要在您的问题中说明“底部路由配置是我正在尝试使用的配置”。
-
当我说底部路由配置是我要使用的配置时,我指的是 RegisterRoutes 中的第二条路由。 Http 之一。我将尝试从注册路由中删除所有路由,并查看单独的属性是否有效,因为我认为这就是您的建议。
标签: c# .net asp.net-web-api routing