やあ、
Web API プロジェクトで小文字のルートを強制する必要があります。それがMVCプロジェクトの場合、次のようなものを使用します
routes.LowercaseUrls = true;
しかし、Web API ではそのプロパティは存在しません。
LowercaseRoutesMVC4 NuGet 拡張機能を試しましたが、拡張機能が役に立たないように、ルートにカスタム ハンドラーが必要です。
私に何ができる?
やあ、
Web API プロジェクトで小文字のルートを強制する必要があります。それがMVCプロジェクトの場合、次のようなものを使用します
routes.LowercaseUrls = true;
しかし、Web API ではそのプロパティは存在しません。
LowercaseRoutesMVC4 NuGet 拡張機能を試しましたが、拡張機能が役に立たないように、ルートにカスタム ハンドラーが必要です。
私に何ができる?
これはあなたが必要とすることをするように見えます
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でこれを見つけました
次のような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);