【问题标题】:WebAPI routing does not workWebAPI 路由不起作用
【发布时间】:2019-01-09 06:31:04
【问题描述】:

我有 WebApiConfig

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

Web API 控制器:

[RoutePrefix("api/Trip")]
public class TripApiController : ApiController
{
    [Route("SaveRouting")]
    [HttpPost]
    public async Task<HttpResponseMessage> SaveRouting(string points, int tripId, decimal totalMileage)
    {
        // ......
        return Request.CreateResponse(HttpStatusCode.OK);
    }

并从 jquery 调用:

            $.post("/api/trip/SaveRouting",
                { points: JSON.stringify(arrayStops), tripId: $("#hdTripId").val(), totalMileage: tMiles },
                function(resp) {
                    App.unblockUI(blockElRouting);
                });

它尝试调用,但失败:

App Insights 说:

什么是无效的?

【问题讨论】:

    标签: c# routing asp.net-web-api2


    【解决方案1】:

    创建一个模型来保存发布的数据

    public class RouteModel {
        public string points { get; set; } 
        public int tripId { get; set; }
        public decimal totalMileage { get; set; }
    }
    

    更新控制器操作以期望来自请求正文的模型

    [RoutePrefix("api/Trip")]
    public class TripApiController : ApiController {
        [Route("SaveRouting")]
        [HttpPost]
        public async Task<IHttpActionResult> SaveRouting([FromBody] RouteModel route) {
            if(ModelState.IsValid) {
                string points = route.points; 
                int tripId = route.tripId;
                decimal totalMileage = route.totalMileage;
    
                // ......
    
                return Ok();
            }
            return BadRequest(ModelState);
        }
    }
    

    最后,在客户端更新请求

    var model = { points: arrayStops, tripId: $("#hdTripId").val(), totalMileage: tMiles };
    
    $.ajax({
        type: "POST",
        url: "/api/trip/SaveRouting",
        data: JSON.stringify(model),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data){
            App.unblockUI(blockElRouting);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 2016-05-10
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多