17

やあ、

Web API プロジェクトで小文字のルートを強制する必要があります。それがMVCプロジェクトの場合、次のようなものを使用します

routes.LowercaseUrls = true;

しかし、Web API ではそのプロパティは存在しません。

LowercaseRoutesMVC4 NuGet 拡張機能を試しましたが、拡張機能が役に立たないように、ルートにカスタム ハンドラーが必要です。

私に何ができる?

4

2 に答える 2

7

これはあなたが必要とすることをするように見えます

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { url = new LowercaseRouteConstraint() }
        );
    }
}

public class LowercaseRouteConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        var path = httpContext.Request.Url.AbsolutePath;
        return path.Equals(path.ToLowerInvariant(), StringComparison.InvariantCulture);
    }
}

https://gist.github.com/benfoster/3274578#file-gistfile1-cs-L4でこれを見つけました

于 2015-01-06T15:52:40.093 に答える
-2

次のようなjson構成があります

public class JsonConfig
{
    public static void Initiliaze(HttpConfiguration config, bool isCamelCase)
    {
        var json = config.Formatters.JsonFormatter;
        json.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.None;
        json.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        json.SerializerSettings.Formatting = Formatting.None;

        if (isCamelCase)
            json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

        config.Formatters.Remove(config.Formatters.XmlFormatter);
    }
}

このメソッドは WebApiConfig.cs のように呼び出すことができます

JsonConfig.Initiliaze(config, true);
于 2015-08-05T12:09:45.917 に答える