HTTP 400 при вызове с двумя параметрами маршрута - PullRequest
0 голосов
/ 02 апреля 2020

Почему этот HTTP-запрос возвращает 400?

[RoutePrefix("common/api/trusts/{trustID}/periods")]
public class PeriodsController : ApiController
{
    [Route("{trustPeriodID}/getPeriodStartEndDates")]
    public object GetPeriodStartEndDates(short trustID, short trustPeriodID)
    {
        return null;
    }
}

Вот вызов:

$http.get("https://localhost:44300/common/api/trusts/1/periods/111811/getPeriodStartEndDates")
.then(function (result) {
     //do something with the result                       
});

Я использую Microsoft.As pNet .WebApi.Core.5.2 .3 и Angularjs.

1 Ответ

1 голос
/ 02 апреля 2020

Прежде всего, диапазон short составляет от -32 768 до 32 767, ваш trustPeriodID - 111811 находится далеко за пределами диапазона. Вместо этого вы можете установить тип int:

public object GetPeriodStartEndDates(short trustID, int trustPeriodID)

Более того, убедитесь, что вы настроили CORS на основе этой ссылки:

https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api#enable -cors

Для глобального включения CORS добавьте следующий код в WebApiConfig.cs:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {

        config.MapHttpAttributeRoutes();

        //replace the url with your own Angular origin
        var cors = new EnableCorsAttribute("http://localhost:4200", "*", "*");
        config.EnableCors(cors);

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