0

HttpHandlerに必要なURLルートをデフォルトルート経由で使用するASP.NETMVCフレームワークルーティングに問題があります。その逆も同様です。

routes.MapRouteLowercase(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional });// Parameter defaults

必要なルートを無視してみました:

routes.IgnoreRoute("api/{*pathInfo}");

MVCルートを追加する前にRouteTableに追加すると、すべてのMVCルートが「/api」ルートを指すようになります。

後で追加すると、ルートはルーティングテーブルにありますが、認識されません。ルートが一致していると表示されるRouteDebuggerを使用してみましたが、呼び出されません。

ソースは、私が書いているこのマイクロRESTフレームワークにあります。

4

2 に答える 2

1

ルーティングを行うためにMVCフレームワークが必要ですか?

そうでない場合は、この記事をご覧ください:HttpHandlerの基本的なルーティング

すばやく簡単なものが必要な場合は、これは良い代替手段です;)

于 2012-05-09T16:00:51.080 に答える
0

私はそれを回避する方法を見つけましたが、URL が「api/」で始まらない場合にルートが MVC ルートをむさぼり食う理由が説明されていません。

私が使用している回避策は、ルートに制約を追加して、それが Url 生成であるかどうかをチェックし、それを無視し、渡される MVC データであるかどうかを確認することです。

// Constrain HTTP method, and an extra constraint so MVC urls aren't swallowed.
route.Constraints = new RouteValueDictionary();
route.Constraints.Add("httpMethod", new HttpMethodConstraint(new string[] { restAttribute.Method }));
route.Constraints.Add("MvcContraint", new IgnoreMvcConstraint());

RouteTable.Routes.Add(route);

制約:

public class IgnoreMvcConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        if (routeDirection == RouteDirection.UrlGeneration)
            return false;
        if (values.ContainsKey("controller") || values.ContainsKey("action"))
            return false;

        if (route.Url.StartsWith(RestHttpHandler._baseUrl))
            return true;
        else
            return false;
    }
}
于 2012-05-01T14:16:37.013 に答える