代码之家  ›  专栏  ›  技术社区  ›  TheBoubou codingbadger

WebApi 2.0-未找到与请求URI匹配的HTTP资源

  •  1
  • TheBoubou codingbadger  · 技术社区  · 6 年前

    使用下面的代码,我命中了构造函数,但从未命中操作。URL为 http://localhost:64704/api/mytest/mymethod 。当我尝试像这样更改路由时,出现了相同的问题:

    config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}"
            );
    
    [Route("api/[controller]")]
    public class MyTestController : ApiController
    {
        readonly IMyFacade myFacade;
        public MyTestController(IMyFacade myFacade) => this.myFacade = myFacade;
    
        [HttpPost]
        [Route("mymethod")]
        public IHttpActionResult MyMethodName([FromBody]MyModel model)
        {
            //some code here
    
            return Ok();
        }
    }
    
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
    
        // Web API routes
        config.MapHttpAttributeRoutes();
    
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
    

    更新1

    public class WebApiApplication : HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
            UnityConfig.RegisterComponents();
        }
    }
    

    更新2

            public static void RegisterComponents()
        {
            var container = new UnityContainer();
    
            // register all your components with the container here
            // it is NOT necessary to register your controllers
    
            // e.g. container.RegisterType<ITestService, TestService>();
    
            /* ...... */
    
            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
        }
    

    更新3 { “Field1”:“1”, “Field2”:“某个键”, “Field3”:“当然有名字” }

    4 回复  |  直到 6 年前
        1
  •  3
  •   Marcus Höglund    6 年前

    出现此问题是因为您希望控制器的路由属性ontop与方法的路由属性ontop合并。 中的情况并非如此。网 WebApi 2.0 ,(添加到.net core mvc中)

    相反,您应该在控制器上使用RoutePrefix属性,使控制器路由与方法路由合并

    [RoutePrefix("api/[controller]")]
    public class MyTestController : ApiController
    {
        readonly IMyFacade myFacade;
        public MyTestController(IMyFacade myFacade) => this.myFacade = myFacade;
    
        [HttpPost]
        [Route("mymethod")]
        public IHttpActionResult MyMethodName([FromBody]MyModel model)
        {
            //some code here
    
            return Ok();
        }
    }
    
        2
  •  1
  •   Saineshwar Bageri - MVP Koyel Sharma    6 年前

    WebApiConfig

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
    
            // Web API routes
            config.MapHttpAttributeRoutes();
    
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
    

    全球的asax公司

     public class WebApiApplication : System.Web.HttpApplication
     {
         protected void Application_Start()
         {
             AreaRegistration.RegisterAllAreas();
             GlobalConfiguration.Configure(WebApiConfig.Register);
             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
             RouteConfig.RegisterRoutes(RouteTable.Routes);
             BundleConfig.RegisterBundles(BundleTable.Bundles);
         }
     }
    

    控制器

    public class MyTestController : ApiController
    {      
        [HttpPost]
        [Route("mymethod")]
        public IHttpActionResult MyMethodName([FromBody]MyModel model)
        {
            return Ok();
        }
    }
    

    调试时

    enter image description here

    发送PostRequest

    enter image description here

        3
  •  0
  •   Advait Baxi    6 年前

    在控制器中,需要指定 RoutePrefix 属性而不是 路线 如下代码所示

    // Specify 'RoutePrefix' attribute instead of 'Route'
    [RoutePrefix("api/[controller]")]
    public class MyTestController : BaseController
    {
        [HttpPost]
        [Route("mymethod")]
        public HttpResponseMessage MyMethodName([FromBody]MyModel model)
        {
            return Request.CreateResponse(System.Net.HttpStatusCode.OK);
        }
    }
    

    然后再试一次。

        4
  •  -1
  •   Sunil Shrestha    6 年前

    您正在使用HttpPost谓词,请确保在发送请求时使用HttpPost方法。