Веб-интерфейс нижнего регистра
Hy там,
Мне нужно обеспечить использование строчных маршрутов в моем проекте веб-API.
Если бы это был проект MVC, я бы использовал что-то вроде
routes.LowercaseUrls = true;
Но в веб-API это свойство не существует.
Я попробовал расширение LowercaseRoutesMVC4 NuGet, но мои маршруты должны иметь настраиваемый обработчик, чтобы расширение не помогло мне.
Что я могу сделать?
Ответы
Ответ 1
Похоже, он делает то, что вам нужно
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
Ответ 2
У меня есть json config like
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);