javascript - 一个 Controller 中的多个路由导致 400 :bad request

标签 javascript c# angularjs asp.net-mvc asp.net-web-api2

让我举例说明我的问题, 我已将我的路线注册如下(RouteConfig.cs):

routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

如果你看一下我的 Controller ,它有以下功能;

[Route("all")]
public HttpResponseMessage Get(HttpRequestMessage request)
{
    return CreateHttpResponse(request, () =>
    {
        HttpResponseMessage response = null;
        var HolidayCalendars = _holidayCalendarsRepository.GetAll().ToList();
        IEnumerable<HolidayCalendarViewModel> holiVm = Mapper.Map<IEnumerable<HolidayCalendar>, IEnumerable<HolidayCalendarViewModel>>(HolidayCalendars);
        response = request.CreateResponse<IEnumerable<HolidayCalendarViewModel>>(HttpStatusCode.OK, holiVm);

        return response;
    });
}

到目前为止,一切进展顺利。我的页面加载了请求的数据。现在,例如,当我去添加另一个功能时;

[Route("allHolidays/{id:int}")]
public HttpResponseMessage GetHolidays(HttpRequestMessage request, int id)
{
    return CreateHttpResponse(request, () =>
    {
        HttpResponseMessage response = null;
        HolidayCalendar Calendar = _holidayCalendarsRepository.GetSingle(id);
        var Holidays = Calendar.Holidays.OrderBy(s => s.HolidayDate).ToList();
        IEnumerable<HolidayViewModel> holidayVm = Mapper.Map<IEnumerable<Holiday>, IEnumerable<HolidayViewModel>>(Holidays);

        response = request.CreateResponse<IEnumerable<HolidayViewModel>>(HttpStatusCode.OK, holidayVm);

        return response;
    });
}

我的网页会出现以下错误;

Failed to load resource: the server responded with a status of 400 (Bad Request)

奇怪的是,我的请求没有改变,我的api中只有一个新的Controller。

这不应该发生,因为我的代码正在请求不同的路由,例如;

function loadData() {
    apiService.get('/api/HolidayCalendars/all', null,
                HolidayCalendarLoadCompleted,
                HolidayCalendarLoadFailed);
}

function loadData() {
    apiService.get('/api/HolidayCalendars/allHolidays?id=' + $routeParams.id, null,
                HolidaysLoadCompleted,
                HolidaysLoadFailed);
}

有什么想法吗?

构造类 WebApiConfig:

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

最佳答案

allHolidays 的路线暗示了这种格式

/api/HolidayCalendars/allHolidays/123

根据你的路由属性

[Route("allHolidays/{id:int}")]

但您已将 id 作为查询字符串参数传递

api/HolidayCalendars/allHolidays?id=123

关于javascript - 一个 Controller 中的多个路由导致 400 :bad request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36014629/

相关文章:

javascript - 如何编写前端(angularjs)到后端(nodejs)?

javascript - Dropzone.js - 显示存储在 app_data 文件夹中的图像

javascript - 这是什么怪物?

angularjs - 具有开放层的 Angular JS

c# - 确定二维数组是否包含元素的最快方法?

c# - 从 Span<byte> 获取 Int32

javascript - 重用在 Controller 之间定义的功能

javascript - 在 UTF-8 网页中显示 ISO-8859-1 字符

javascript - 在 YUI 中的数据源中显示网格中的数据?

C# 获取两个 datetime 对象之间的每两个小时