用于ASP.NET MVC Web服务的常见操作过滤器或HTTPMODULE



我们有MVC 1.0编写的Web服务。有必要拦截对此服务提出的所有请求。在这种情况下,开发一个httpmodule是明智的,该httpmodule拦截了每个请求并在达到代码之前修改该方法参数,还是我应该创建操作过滤器并将属性放在每个方法上?我的第一个猜测是用操作过滤器属性标记每种方法,我应该创建一个httpmodule,这将最大程度地减少工作量和代码。

示例

  1. 客户端称呼" ServiceName/action/用户名"
  2. 服务器在httpmodule中拦截了此请求,解码用户名
  3. 解码用户名传递给操作。

你们还有其他建议吗?

您可以使用自定义路由(从路由继承)来修复此操作。类似:

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。

最新更新