0

MVC 1.0 で記述された Web サービスがあります。このサービスに対して行われるすべてのリクエストをインターセプトする必要があります。この場合、コードに到達する前にすべてのリクエストをインターセプトしてメソッド パラメータを変更する HTTPModule を開発するのが賢明ですか、それともアクション フィルタを作成してすべてのメソッドに属性を配置する必要がありますか? 私の最初の推測では、アクション フィルター属性ですべてのメソッドをマークするのではなく、 httpModule を作成するだけで済みます。これにより、労力とコードが最小限に抑えられます。

  1. クライアントは「サービス名/アクション/ユーザー名」を呼び出します
  2. サーバーは HTTPModule でこのリクエストをインターセプトし、ユーザー名をデコードします
  3. デコード ユーザー名がアクションに渡されます。

他に何か提案はありますか?

4

1 に答える 1

0

これは、Route から継承するカスタム ルートを使用して修正できます。何かのようなもの:

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 を実装する必要があります。

于 2012-12-19T19:52:59.420 に答える