0

サブドメインルート制約では、以下のコードを使用してサブドメイン名をコントローラーに渡します。ただし、コントローラーのサブドメインエントリがありません(アクションとコントローラーのエントリのみが存在します)。ここで何が問題になっていますか?または、(Request.Headers ["HOST"]の助けを借りて)コントローラー自体のサブドメインをスニッフィングする必要がありますか?ベストプラクティスは何ですか?

public class SubdomainRouting : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        //
        //get subdomain here
        //

        if (values.ContainsKey("subdomain") == false)
        {
            values.Add("subdomain", subdomain);
        }
        return true;
    }
}
4

2 に答える 2

1

私はあなたがvalues議論を間違った方法で解釈していると思います。MSDNによると、これはURLのパラメーターを含むオブジェクトです。そのため、コントローラーで取得するのと同じRouteDataDictionaryであるかどうかはわかりません。

サブドメインを取得する最も簡単な方法は、コントローラーで取得したRequest.Url.Hostから取得することです。

于 2012-05-09T20:16:36.073 に答える
0

ルーティング制約の実装を変更しました。IRouteConstraintを実装する代わりに、RouteBaseを実装しました。このようにして、ルート値を追加することができました。

public class SubdomainRoute : RouteBase
{
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        RouteData returnValue = null;

        //some code here 

        returnValue = new RouteData(this, new MvcRouteHandler());
        returnValue.Values.Add("controller", "SomeController");
        returnValue.Values.Add("action", "SomeAction");
        returnValue.Values.Add("key", some_value_to_pass_to_controller);

        //some code here

        return returnValue;
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        return null;
    }
}
于 2012-05-14T14:02:14.763 に答える