我当时想捕获用户输入的所有参数,路线信息和其他表单数据,因此我可以对其进行编码,以防止对我的网站进行XSS攻击。我想全局执行此操作,而不是针对某个特定控制器。如何在WEB API 2.0 .net中做到这一点?
答案 0 :(得分:2)
我认为您需要一个DelegatingHandler来满足您的需求。 每个请求都首先通过处理程序,您可以在其中拦截它们:
public class RequestHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
//Validate the uri and or encode it
Console.WriteLine(request.RequestUri);
//Validate the content
Console.WriteLine(request.Content.ReadAsStringAsync().Result);
// If you like, create a whole new request or cancel it.
return base.SendAsync(request, cancellationToken);
}
}
您可以全局注册:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MessageHandlers.Add(new RequestHandler());
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
作为进一步参考,请参见网络api海报:https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf
编码愉快!