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
атрибут от вашего контроллера.