How to configure C# ASP.NET WebAPI in web.configure file?

ASP.NET Web API uses code-based configuration rather than XML-based configuration in web.config. While you cannot configure Web API routing and behavior directly in web.config, you can configure it programmatically in the WebApiConfig.cs file or during application startup.

Configuration Location

Web API configuration is typically done in the Register method of the WebApiConfig class, which is called during application startup −

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Web API configuration goes here
    }
}

Key Configuration Components

The following components can be configured to customize Web API behavior −

  • Routes − Define URL patterns and routing rules

  • Formatters − Handle serialization and content negotiation

  • Filters − Implement cross-cutting concerns like authentication

  • Dependency Resolver − Handle dependency injection

  • Message Handlers − Process requests before they reach controllers

  • Parameter Binding Rules − Control how parameters are bound from requests

Configuring Routes

Routes determine how URLs are mapped to controller actions. The routing table is configured using MapHttpRoute

using System.Web.Http;

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Web API routes
        config.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        
        // Custom route
        config.MapHttpRoute(
            name: "CustomApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

Configuring Formatters

Formatters handle content negotiation and serialization. You can configure JSON formatters, XML formatters, or add custom formatters −

using System.Web.Http;
using Newtonsoft.Json.Serialization;

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Remove XML formatter to return JSON by default
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        
        // Configure JSON formatter
        config.Formatters.JsonFormatter.SerializerSettings.ContractResolver 
            = new CamelCasePropertyNamesContractResolver();
        
        // Set JSON as default
        config.Formatters.JsonFormatter.SupportedMediaTypes
            .Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
    }
}

Configuring Filters

Filters provide cross-cutting functionality like logging, exception handling, and authorization −

using System.Web.Http;
using System.Web.Http.Filters;

public class CustomExceptionFilter : ExceptionFilterAttribute {
    public override void OnException(HttpActionExecutedContext context) {
        // Handle exceptions
        System.Diagnostics.Debug.WriteLine("Exception occurred: " + context.Exception.Message);
        base.OnException(context);
    }
}

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Add global filter
        config.Filters.Add(new CustomExceptionFilter());
        
        // Add authorization filter
        config.Filters.Add(new System.Web.Http.AuthorizeAttribute());
    }
}

Complete Configuration Example

using System.Web.Http;
using System.Web.Http.Cors;
using Newtonsoft.Json.Serialization;

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Enable CORS
        config.EnableCors();
        
        // Configure routes
        config.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        
        // Configure JSON formatter
        config.Formatters.JsonFormatter.SerializerSettings.ContractResolver
            = new CamelCasePropertyNamesContractResolver();
        
        // Remove XML formatter
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        
        // Add custom message handler
        config.MessageHandlers.Add(new System.Net.Http.DelegatingHandler());
    }
}

web.config Limitations

Configuration Type web.config Support Alternative
Routing Not supported WebApiConfig.cs
Formatters Not supported Code-based configuration
Connection Strings Supported web.config <connectionStrings>
App Settings Supported web.config <appSettings>

Conclusion

ASP.NET Web API uses code-based configuration in WebApiConfig.cs rather than XML configuration in web.config. This approach provides more flexibility and type safety for configuring routes, formatters, filters, and other Web API components. While web.config can still store connection strings and app settings, the core Web API behavior must be configured programmatically.

Updated on: 2026-03-17T07:04:36+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements