AngularJS$http://.NET Web API-获取400(错误请求)或NULL POST操作方法参数
AngularJS $http / .NET Web API - Either Getting 400 (Bad Request) or NULL POST Action Method Parameter
以下是对我的问题的简要描述(我可以这样做),以及所有相关代码。我希望这篇文章的措辞会比我之前请求的帮助更清晰一些。
我有一个.NET Web API和一个AngularJS前端。我有一个非常简单的POST方法,它接受"Envelope"类型的参数,如下所示:
public class Envelope {
public int listingId { get; set; }
public string Description { get; set; }
public override string ToString() {
return listingId.ToString() + "; " + Description;
}
}
API上的实际POST方法如下所示:
[EnableCors(origins: "http://simpleapiearl.azurewebsites.net", headers: "*", methods: "*")]
public class EnvelopesController : ApiController {
// POST: api/Envelopes
public string Post(Envelope env) {
return "rval: " + env.ToString() + " (and my addition to env)";
}
}
我的前端AngularJS$http POST看起来像这样:
$scope.testPOST = function () {
var env = {
listingId:1234,
Description:"some desc"
};
$http({
method: 'POST',
url: 'http://simpleApiEarl.azurewebsites.net/api/envelopes',
data: JSON.stringify(env),
headers: {
'Content-Type': 'application/json'
}
}).
success(function (data, status, headers, config) {
$scope.postStatus = 'success: ' + data;
}).
error(function (data, status, headers, config) {
$scope.postStatus = 'error: ' + status;
});
}
以下是我的问题(编号便于参考):
- 使用上面显示的所有代码,当我从页面中调用"testPOST()"时,我会得到一个"400(坏请求)"。这听起来像是.NET Web API路由问题,但我搞不清楚是什么问题
- 如果我将"内容类型"标头更改为"application/x-www-form-urlencoded",我可以避免400(事实上得到200)。但是,这会导致API将"env"参数视为NULL
- 我倾向于用'[FromBody]'属性修饰我的操作方法参数,但这样做并不能解决API操作方法中'env'为NULL的问题
我用我非常简单的HTML页面创建了一个简单的plunk,用来调用API。可以在这里找到:
http://plnkr.co/edit/hY2OUeg9CRQ1QOz8MGU8?p=info
非常感谢您提供的任何帮助。
"内容类型":"应用程序/x-www-form-urlencoded"
这会奏效的。
这是控制器:
public async Task<HttpResponseMessage> GetData(int pageNo, int pageSize)
{
HttpResponseMessage response = null;
int totalPage, totalRecord;
totalRecord = db.Employees.Count();
totalPage = (totalRecord / pageSize) + ((totalRecord % pageSize) > 0 ? 1 : 0);
var record = (from a in db.Employees
orderby a.id
select a).Skip((pageNo - 1) * pageSize).Take(pageSize).ToList();
DataWithPaging data = new DataWithPaging
{
PageNo = pageNo,
PageSize = pageSize,
TotalPage = totalPage,
TotalRecord = totalRecord,
EmployeeData = record
};
response = Request.CreateResponse(HttpStatusCode.OK, data);
return await Task.FromResult(response);
}
您应该有一个名为:DataWithPaging 的类
public class DataWithPaging
{
public int PageNo { get; set; }
public int PageSize { get; set; }
public int TotalPage { get; set; }
public int TotalRecord { get; set; }
public List<Employee> Employees { get; set; }
}
相关文章:
- 尝试发布大型JSON数据时出现错误请求错误
- 仅在 IE 中使用 jQuery 发布数据时出现错误请求错误
- JavaScript JSONP请求错误--未捕获的语法错误:意外的令牌:
- 正在生成$http.get请求..错误
- CORS预检请求错误无法通过安装npm cors软件包解决
- JSON PUT 请求错误
- 400 错误请求错误在 Ajax POST 到 spring RestController
- 使用 cURL 请求 svg.sencha.io 时请求错误
- WCF Web 服务在通过 Javascript 调用时返回“错误请求”错误
- JSFiddle “请使用后请求”错误
- 使用 JS 更改映像路径的请求错误
- AngularJS对跨源资源执行OPTIONS HTTP请求=>错误401
- 条纹::无效请求错误(此客户没有附加的付款来源)
- JSON 请求错误 500
- Ajax 请求错误 404
- 在 Node.js 服务器内发出异步请求错误:“类型错误:对象 #<对象> 没有方法'_implicitHeader'”
- 为什么这个 $.getJSON 请求错误
- 角度/业力 - 预期请求和观察到的请求相同时的“意外请求”错误
- 从 Mapbox.js 使用“LoadURL()”时出现“跨源请求错误”
- Chrome 应用/扩展程序 - 后台请求错误,或允许应用问题加载 Google 文档 API