ASP WebAPI мы можем иметь дополнительный RoutePrefix?

Мне интересно, если это возможно или нет, чтобы установить WebAPI RoutePrefix с необязательным префиксом в URL? То, что я пытаюсь достичь, - это возможность передать (или нет) язык локали в моем маршруте WebAPI. Я хотел бы иметь 2 возможных маршрута, обеспечивающих такой же результат.

URL 1 (с локалью)http://localhost/en-US/api/users/1

URL 2 (без локали)http://localhost/api/users/1

//WebApiConfig.cs
config.Routes.MapHttpRoute(
            name: "ApiWithLanguage",
            routeTemplate: "{language}/api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { language = @"^(([a-z]{2})|([a-z]{2}-[a-zA-Z]{2}))$" } // can be:: en, en-CA, fr, fr-CA, ...
);

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
);

Я попытался добавить следующий код в мой контроллер WebAPI:

// UserController.cs
[System.Web.Http.RoutePrefix("{language?}/api")]
public class UserController : ApiController

Это работает с предоставленной локалью, но не работает без нее... Я думал, что ? сделало бы это необязательным, но это, кажется, не имеет никакого эффекта. Это может быть сделано, или это просто невозможно?

1 ответ

Это не работает, потому что вы смешали атрибуты и обычную маршрутизацию! Чтобы получить эту работу, используйте обычную маршрутизацию и удалите RoutePrefix и любой другой Route атрибут от вашего контроллера.

Другие вопросы по тегам