相关疑难解决方法(0)

Angular POST to Web API不传递数据

我已经用jQuery编写针对ASP.NET Web API的代码了一段时间,我在Angular中开始了一些新的东西(针对相同的Web API后端编写.)

我正在发布一个方法,该方法将返回系统中实体的一些搜索结果.它看起来像这样:

public IEnumerable<dynamic> Post(string entity, FormDataCollection parameters)
{
    // entity is passed on the route.
    // parameters contains all the stuff I'm trying to get here.
}
Run Code Online (Sandbox Code Playgroud)

如果我使用jQuery.post调用该方法:

$.post('api/search/child', {where : 'ParentID = 1'}, function(d){ foo = d });
Run Code Online (Sandbox Code Playgroud)

它运作正常,并返回我期望的.

我在我的角度应用程序中提供了一个类似的调用服务:

$http.post('api/search/child', { where: 'parentID = ' + parent.ID })
.success(function (data, status, headers, config) {
    // etc.
})
Run Code Online (Sandbox Code Playgroud)

但是当它在服务器上点击我的"Post"方法时,"paramters"为空.

经过一些谷歌搜索后,我尝试添加一个内容类型的标题,以确保它作为JSON传递,并尝试JSON.stringify-ing和$ .param() - "数据"参数,但没有做任何事情(和从我所读到的那些不应该是必要的.)我在这里做错了什么?谢谢你的帮助!

更新:这是来自(工作)jQuery示例的原始请求:

POST http://localhost:51383/api/search/child HTTP/1.1
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: …
Run Code Online (Sandbox Code Playgroud)

asp.net-web-api angularjs

5
推荐指数
1
解决办法
2万
查看次数

如何区分模型绑定错误和模型验证错误?

我正在使用 ASP.NET Core MVC 2.0 实现一个 REST API 项目,如果模型绑定失败(因为请求语法错误),我想返回 400 状态代码,如果模型验证失败,我想返回 422 状态代码(因为该请求在语法上是正确的,但包含不可接受的值)。

例如,给定一个动作,如

[HttpPut("{id}")]
public async Task<IActionResult> UpdateAsync(
    [FromRoute] int id,
    [FromBody] ThingModel model)
Run Code Online (Sandbox Code Playgroud)

id路由中的参数包含非数字字符或请求中未指定正文时,我想返回 400 状态代码,当属性ThingModel包含无效值时返回 422 状态代码。

从我所看到的情况来看,IValueProviderIModelBinder实现都ModelStateDictionary像验证器一样将它们的错误添加到请求中,并且无法在绑定和验证之间注入代码。

我怎样才能实现这样的行为?

c# model-binding model-validation asp.net-core-mvc

5
推荐指数
1
解决办法
2594
查看次数

绑定[Serializable]类的ASP.Net MVC模型

我有这堂课

[Serializable]
public class MyObject {
    // properties omitted
}
Run Code Online (Sandbox Code Playgroud)

以及此WebAPI控制器方法:

[HttpPost]
[ResponseType(typeof(string))]
public IHttpActionResult SetMyObject(MyObject o) {
    // process object
}
Run Code Online (Sandbox Code Playgroud)

但是它无法建模绑定到MyObject类。控制器方法中的对象o完全为空,每个属性均为默认值(因此通常为null)。

事实证明,这是由于MyObject上的[Serializable]注释所致。删除后,模型绑定将再次起作用。

有没有办法保持[可序列化]并修复模型绑定?

c# asp.net-mvc model-binding asp.net-web-api

3
推荐指数
1
解决办法
2525
查看次数