2

以下のように、ASP.NET アプリケーションで URL をマップしました。

        context.MapRoute(
            "Product_v1_DataExchange",
            "v1/xch",
            new { controller = "Data", action = "Exchange" });

        context.MapRoute(
            "Product_v1_Register",
            "v1/register",
            new { controller = "Registration", action = "Register" });

次の URL のみを機能させたい:

http://servername/v1/xch
http://servername/v1/register

ただし、次の URL も正常に機能しています。

http://servername/v1/xch?test
http://servername/v1/register/?*e/
http://servername/v1//./register/./?*

定義された静的 URL のみが許可されるように制約を設定するにはどうすればよいですか?

4

1 に答える 1

2

RouteConstraint次のように新規作成します。

public class ExactMatchConstraint : IRouteConstraint
{
    private readonly bool _caseSensitive;

    public ExactMatchConstraint(bool caseSensitive = false)
    {
        this._caseSensitive = caseSensitive;
    }

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        return 0 == String.Compare(route.Url.Trim('/'), httpContext.Request.RawUrl.Trim('/'), !this._caseSensitive);
    }
}

次に、それを使用します。

    routes.MapRoute(
        "Custom",
        "My/Custom",
        new { controller = "Home", action = "Custom" },
        new { exact = new ExactMatchConstraint(/*true for case-sensitive */) }
    );

結果:

/My/Custom (200 OK)
/My/Custom/ (200 OK)

/My/Custom/k (404 NOT FOUND)
/My/Custom/k/v (404 NOT FOUND)
/My/Custom/? (404 NOT FOUND)
/My/Custom/?k=v (404 NOT FOUND)
于 2013-06-06T08:23:53.790 に答える