我们有MVC 1.0编写的Web服务。有必要拦截对此服务提出的所有请求。在这种情况下,开发一个httpmodule是明智的,该httpmodule拦截了每个请求并在达到代码之前修改该方法参数,还是我应该创建操作过滤器并将属性放在每个方法上?我的第一个猜测是用操作过滤器属性标记每种方法,我应该创建一个httpmodule,这将最大程度地减少工作量和代码。
示例
- 客户端称呼" ServiceName/action/用户名"
- 服务器在httpmodule中拦截了此请求,解码用户名
- 解码用户名传递给操作。
你们还有其他建议吗?
您可以使用自定义路由(从路由继承)来修复此操作。类似:
public class UserNameRoute : Route
{
public override RouteData GetRouteData(HttpContextBase httpContext) {
var routeData = base.GetRouteData(httpContext);
// Not sure if you need to set routeData.Values["username"] too
// to make sure the route catches on
routeData.DataTokens["username"] = DecodeUserName(routeData.Values);
return routeData;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) {
values["username"] = EncodeUserName(requestContext.RouteData.DataTokens);
return base.GetVirtualPath(requestContext, values);
}
}
然后您"只"必须实现decodeusername和encodeusername。