Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
