【问题标题】:Routing not working .net mvc api路由不起作用.net mvc api
【发布时间】: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


【解决方案1】:

原帖的第一条评论解决了我一半的问题——我试图以两种不同的方式配置路由。我从 RegisterRoutes 中删除了所有代码并使用了

config.MapHttpAttributeRoutes();

在 WebApiConfig 中。 我还需要在 api 控制器上使用 RoutePrefix 属性,而不仅仅是 Route - 将在控制器方法上使用。现在工作

【讨论】:

    【解决方案2】:

    1.在 Global.asax.cs 中只需评论 //RouteConfig.RegisterRoutes(RouteTable.Routes); 当您使用 web api 时,不需要此路由配置 2.在 WebApiConfig.cs 中仅使用以下行 config.Routes.MapHttpRoute( 名称:“默认API”, routeTemplate: "api/{controller}/{action}/{id}", 默认值:新 { id = RouteParameter.Optional } );

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 2021-10-02
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多