Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธี Configure C# ASP.NET WebAPI ใน web.config ไฟล์

ไม่สามารถ Configure Web API ใน web.config ได้

Web API รองรับ Code-based Configuration เท่านั้น ไม่สามารถ Configure ใน web.config File ได้

เราสามารถ Configure Web API เพื่อปรับแต่งพฤติกรรมของ Web API Hosting Infrastructure และ Components เช่น:

  • Routes - Public Methods ของ Controller เรียกว่า Action Methods
  • Formatters - Input/Output Formatters สำหรับ Data Exchange
  • Filters - Cross-cutting Features (Logging, Exception Handling, Auth)
  • Dependency Resolver - IDependencyResolver Interface
  • Message Handlers - Process/Edit/Decline Request ก่อนถึง Controller
  • ParameterBindingRules - กฎการ Bind Parameters
  • Properties - Custom Properties
  • Services - Custom Services

การกำหนดค่า Routes


public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Attribute Routing
        config.MapHttpAttributeRoutes();
        
        // Convention-based Routing
        config.Routes.MapHttpRoute(
            name: "API Default",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        
        // Route with Constraints
        config.Routes.MapHttpRoute(
            name: "ActionApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { id = @"\d+" }
        );
    }
}

การกำหนดค่า Formatters


public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // JSON Formatter Settings
        var jsonFormatter = config.Formatters.JsonFormatter;
        jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
        jsonFormatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
        jsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
        jsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-ddTHH:mm:ssZ";
        
        // Remove XML Formatter (Force JSON Only)
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        
        // Add Custom Formatter
        config.Formatters.Add(new CsvMediaTypeFormatter());
    }
}

การกำหนดค่า Filters


public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Global Filters
        config.Filters.Add(new AuthorizeAttribute());
        config.Filters.Add(new HandleErrorAttribute());
        config.Filters.Add(new CustomActionFilterAttribute());
        
        // หรือใช้ Filter Providers
        config.Services.Replace(typeof(IFilterProvider), new CustomFilterProvider());
    }
}

การกำหนดค่า Dependency Resolver


// ใช้ Unity, Autofac, Ninject, SimpleInjector, หรือ Built-in (ASP.NET Core)
public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        var container = new UnityContainer();
        container.RegisterType();
        
        config.DependencyResolver = new UnityDependencyResolver(container);
    }
}

การกำหนดค่า Message Handlers


public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Order matters: First added = Outermost
        config.MessageHandlers.Add(new LoggingHandler());
        config.MessageHandlers.Add(new AuthenticationHandler());
        config.MessageHandlers.Add(new RateLimitingHandler());
    }
}

การกำหนดค่า Parameter Binding Rules


public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Custom Parameter Binding Rule
        config.ParameterBindingRules.Insert(0, descriptor => {
            if (descriptor.ParameterType == typeof(DateTime) && descriptor.ParameterName == "date") {
                return new CustomDateTimeParameterBinding(descriptor);
            }
            return null; // Use default
        });
    }
}

WebApiConfig Registration ใน Global.asax


public class WebApiApplication : System.Web.HttpApplication {
    protected void Application_Start() {
        GlobalConfiguration.Configure(WebApiConfig.Register);
        // หรือแบบเก่า
        // WebApiConfig.Register(GlobalConfiguration.Configuration);
    }
}

สรุป: Web API Configuration = Code-Based เท่านั้น

ไม่มี XML Configuration ใน web.config สำหรับ Web API Pipeline ทั้งหมดถูก Configure ผ่าน HttpConfiguration Object ใน WebApiConfig.Register Method