简体   繁体   中英

MVC 4 Web Api 404

I have looked all over for some kind of soultion for this and it seems I have it setup correctly and followed all corrections in other questions.

When calling " http://localhost/en/api/cart/get " I get:

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost/en/api/cart/get'.","MessageDetail":"No type was found that matches the controller named 'cart'."}

...when trying to access a ApiController setup in an EPiServer CMS/Commerce 7.5+ solution.

The Controller looks like this:

public class CartController : ApiController
{
    [HttpGet]
    public string Get()
    {
        return "OK";
    }
}

In Global.asax.cs i have this:

protected void Application_Start()
    {
        RegisterApis(GlobalConfiguration.Configuration);

And the RegisterAPis looks like this:

public static void RegisterApis(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
         "Api", // Route name 
         "api/{controller}/{action}/{id}", // URL with parameters 
         new { id = RouteParameter.Optional } // Parameter defaults 
        );

        config.Routes.MapHttpRoute(
         "LanguageAwareApi", // Route name 
         "{language}/api/{controller}/{action}/{id}", // URL with parameters 
         new { id = RouteParameter.Optional } // Parameter defaults
        );

        // We only support JSON
        var appXmlType = GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
    }

On the same machine I have the EPiServer Commerce starterkit running i IIS and the code for registering the api controllers is the same. That site runs fine and the api calls can be made correctly but on my site all I get is 404.

So I am probably missing some configuration but I can't for my life figure out what it is. The weird part is that on my site I'm running the EPiServer ServiceApi which creates the /episerverapi Web Api mapping and that works just fine.

Anyone got any clues on why I can't get my APiControllers to work?

In Web API the http verb help the framework to find the right action to be executed and return a result. For sample, in a case of a get method, you just call the controller by get http verb:

http://localhost/en/api/cart

It will bind a Get action method in the Cart controller class. It is valid for a Post , Put , Delete methods too. Keep the default route of asp.net web api

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

Try calling just

http://localhost/en/api/cart

In WebAPI if the name of the method matches a HTTP verb then it calls that method when that verb is used on that controller.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM