属性ベースのルーティングを試しています。見た目は良いのですが、問題が 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
ます。
ルート値は期待どおりaction
andで取得されますcontroller
が、キーurl
は null です。*url
鍵はありません。