Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WebApi 2 Http Post 405 "The requested resource does not support http method 'POST'"

I have looked throw all StackOverflow, but didn`t find solution for my case I have 405 HttpStatusCode calling API/Regions/Create action Here is my baseController method:

 [HttpPost]
        public virtual IHttpActionResult Create([FromBody]T entity)
        {
            try
            {
                repository.Create(entity);

                return Ok(entity);
            }
            catch (HttpException e)
            {
                return new ExceptionResult(e, this);
            }
        }

RegionController.cs

public class RegionsController : BaseController<Region, RegionRepository>
{
    public RegionsController()
    { }
    public RegionsController(RegionRepository _repository)
    {
        RegionRepository repository = new RegionRepository();//_repository;
    }

    RegionRepository repository = new RegionRepository();

    [HttpGet]
    [Route("api/regions/{name}")]
    public IHttpActionResult Get(string name)
    {
        try
        {
            var region = repository.Get(name);

            return Ok(region);
        }
        catch (HttpException e)
        {
            return new ExceptionResult(e, this);
        }
    }
}

WebApi config:

      public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Configure Web API to use only bearer token authentication.
            // Web API configuration and services
            var cors = new EnableCorsAttribute("*", "*", "*");
            config.EnableCors(cors);


            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));


            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

Global.asax:

    public class WebApiApplication : System.Web.HttpApplication
        {
            private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
            protected void Application_Start()
            {
                logger.Info("Application Start");
                AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure(WebApiConfig.Register);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);

               //GlobalConfiguration.Configuration.MessageHandlers.Add(new CorsHandler());
            }

            //protected void Application_BeginRequest(object sender, EventArgs e)
            //{
            //    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
            //    //if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
            //    //{
            //        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");

            //        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
            //        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
            //        HttpContext.Current.Response.End();
            // //   }
            //}

            private void Application_Error(object sender, EventArgs e)
            {

                var lastException = Server.GetLastError();

                NLog.LogManager.GetCurrentClassLogger().Error(lastException);

            }


        }
}

and Web.Config:

      <system.web>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
    </httpModules>
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>

Any suggestions what might be wrong?

like image 467
Александр Лытысов Avatar asked Mar 01 '26 20:03

Александр Лытысов


1 Answers

You should call API/Regions on your POST request, not API/Regions/Create, unless you specify API/Regions/Create in a Route attribute on the action. WebApi will know what method to search for to handle the request.

like image 116
martennis Avatar answered Mar 04 '26 09:03

martennis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!