Веб-интерфейс нижнего регистра

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);