将带有对象的查询字符串传递给WebAPI?

时间:2019-01-17 18:53:09

标签: angular asp.net-web-api kendo-ui

是否可以将查询字符串和模型对象从angular传递到webapi?我的第一个参数始终被填充,但是即使我在请求有效载荷中看到了所有数据,模型参数也为空。

我的模特

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="formCalcul" class="col-sm-12 col-md-6 mx-auto">
        <div class="form-group ft-20">
            <label for="type">Type de condo</label>
            <select data-cell="A1" class="form-control custom-select-lg ft-20 mb-3" id="type">
                <option selected>Choose a first option</option>
                <option id="min" value="180000">Le minimaliste</option>
                <option id="fam" value="220000">Le familiale</option>
                <option id="mod" value="400000">Le moderne</option>
            </select>
        </div>

        <div class="form-group">
            <label for="secteur">Secteur</label>
            <select data-cell="A2" class="form-control custom-select-lg ft-20 mb-3" id="secteur">
                <option selected>Choose a second option</option>
                <option id="cha" value="25000">Charlesbourg</option>
                <option id="anc" value="0">Ancienne-Lorette</option>
                <option id="hau" value="80000">Haute-Ville</option>
                <option id="bea" value="0">Beauport</option>
                <option id="lim" value="50000">Limoilou</option>
            </select>
        </div>

        <div class="form-group ft-30">
            <label class="col-12">Total</label>
            <div class="col-12">
                <label data-cell="B1" data-format="$ 0,0.00" data-formula="SUM(A1:A12)">$ 0.00</label>
            </div>
        </div>
    </form>

我的API方法

public Class Person
{
   public string Name {get; set;}
   public DateTime date {get; set;}
}

我的查询字符串

http://localhost:60655/api/DataInput/DataResult/?page=1&pageSize=22

请求有效载荷

    [Route("MyRoute/")]
    [HttpPost]       
    public DataSourceResult DataResult([ModelBinder(typeof(WebApiDataSourceRequestModelBinder))]DataSourceRequest request, Person model)
    {          

    }

我的帖子通话

model: {name: "Time", date: "2014-12-18T18:35:52.087Z"…}

2 个答案:

答案 0 :(得分:0)

目前还不清楚您要问什么,并且有很多不相关的代码。我正在回答你的琐事问题,但身体没有帮助我帮助你。

使用Angular HttpClient,您可以将查询字符串作为Http参数传递。

这是一种调用api并返回可观察到的方法:

method(object: any) {
  const body = JSON.stringify(object); // Create body object
  const headers = new HttpHeaders({'Content-Type': 'application/json'}); // Create headers
  const param = "some-param"; // Create param value
  return this.http.post<IResponse>('someurl.com/some/path', body, {headers: headers, params: new HttpParams().set('param name', param )});
} 

答案 1 :(得分:0)

您应该只能使用[FromUri],例如:

[Route("MyRoute/")]
[HttpPost]       
public DataSourceResult DataResult([FromUri] DataSourceRequest request, Person model)
{          

}

看到这个非常相似的问题已经回答:Complex type is getting null in a ApiController parameter