1

属性ベースのルーティングを試しています。見た目は良いのですが、問題が 1 つあります。

ドキュメント (attributerouting.net) と SO を精査しましたが、カスタム ルート制約を使用してスラッシュを含むパラメーターを渡す方法がわかりません。たとえば、URL。

コントローラーの属性:

    [GET("{url:CustomURLConstraint}")]
    public ActionResult DisplayByURL(string url)
    {
        ...
    }

IRouteConstraint:

public class CustomURLConstraint: IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        string urlToTest = values[parameterName].ToString();
        ....test for url here...
    }
}

これはうまく機能します.... URL にスラッシュが含まれている場合を除いて、404 が表示されます。

そこで、次のようにルート パラメータにアスタリスクを追加しました。

    [GET("{*url:CustomURLConstraint}")]
    public ActionResult DisplayByURL(string url)
    {
        ...
    }

しかし、今は IRouteConstraint クラスの値にアクセスできません。

CustomURLConstraint の Match メソッドでは、値はvalues[parameterName]WITH キャッチオール スター - as を介して取得され*urlます。

ルート値は期待どおりactionandで取得されますcontrollerが、キーurlは null です。*url鍵はありません。

4

0 に答える 0