How to add Web API to an existing ASP.NET MVC (5) Web Application project?

后端 未结 1 1929
花落未央
花落未央 2020-11-30 17:03

Assuming you forgot to tick the Web API checkbox (add it to the project) when making a new MVC (5) project, what do you need to do add Web API and get it working?

相关标签:
1条回答
  • 2020-11-30 17:51

    Update the MVC project

    Use Nuget to get the newest Web API.

    Project - Right click - Manage Nuget Packages - Search for Web API (Microsoft ASP.NET Web API ...) and install it to your MVC project.

    Then you still need to get Web API routing to work. From Microsoft's Configuring ASP.NET Web API 2

    Add WebApiConfig.cs to the App_Start/ folder

    using System.Web.Http;
    
    namespace WebApplication1
    {
        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // TODO: Add any additional configuration code.
    
                // Web API routes
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
    
            // WebAPI when dealing with JSON & JavaScript!
            // Setup json serialization to serialize classes to camel (std. Json format)
            var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
            formatter.SerializerSettings.ContractResolver =
                new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
            }
        }
    }
    

    If you have an MVC Project it will have Global.asax.cs, add the new routes. Order of the Global.asax.cs routes is critical. Note there are outdated examples which use WebApiConfig.Register

    Add this line to Global.asax.cs: GlobalConfiguration.Configure(WebApiConfig.Register);

    protected void Application_Start()
    {
        // Default stuff
        AreaRegistration.RegisterAllAreas();
    
        // Manually installed WebAPI 2.2 after making an MVC project.
        GlobalConfiguration.Configure(WebApiConfig.Register); // NEW way
        //WebApiConfig.Register(GlobalConfiguration.Configuration); // DEPRECATED
    
        // Default stuff
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
    

    WebAPI Help

    To get the (very) helpful WebAPI help pages, install WebAPI.HelpPage. See http://channel9.msdn.com/Events/Build/2014/3-644 (~42 minutes in) for what it does. It looks very helpful!

    Nuget Console: Install-Package Microsoft.AspNet.WebApi.HelpPage

    To verify WebAPI is working:

    To the controllers folder -> Add new item -> Web API Controller Class.

    public class TestController : ApiController
    {
        //public TestController() { }
    
        // GET api/<controller>
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    
        // GET api/<controller>/5
        public string Get(int id)
        {
            return "value";
        }
        //...
    }
    

    Now you can test in IE/FF/Chrome as usual, or in the JavaScript consoles for non-get testing.

    (With just the controller in the URL it will call the GET() action in the new Web API Controller, it's automatically mapped to methods/actions depending on the REST e.g. PUT/POST/GET/DELETE. You don't need to call them by action like in MVC) The URL directly:

    http://localhost:PORT/api/CONTROLLERNAME/
    

    Alternatively use jQuery to query the controller. Run the project, Open the console (F12 in IE) and try run an Ajax query. (Check your PORT & CONTROLLERNAME)

    $.get( "http://localhost:PORT/api/CONTROLLERNAME/", function( data ) {
        //$( ".result" ).html( data );
        alert( "Get data received:" + data);
    });
    

    Side note: There are some pros/cons to consider when combining MVC and Web API in a project

    WebAPI Help verification: http://localhost:PORT/help

    0 讨论(0)
提交回复
热议问题