我有一个ASP.NET MVC WebApplication,我正在使用ASP.NET Web API框架。
Javascript代码:
var data = new FormData();
data.append("filesToDelete", "Value");
$.ajax({
type: "POST",
url: "/api/FileAttachment/UploadFiles?clientContactId=" + clientContactId,
contentType: false,
processData: false,
data: data,
success: function (result) {
// Do something
},
error: function (xhr, status, p3, p4) {
// Do something
}
});
C#代码(WebAPI):
public void UploadFiles(int clientContactId) {
if (!Request.Content.IsMimeMultipartContent()) {
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var jsonContent = Request.Content.ReadAsStringAsync().Result;
}
如何根据Javascript FormData传递的键值对阅读jsonContent
?
我尝试JsonConvert.DeserializeObject<?>
,但需要特定类型才能反序列化。
我想获取从Javascript FormData传递的键"filesToDelete"
的值。
如何获得此值?
答案 0 :(得分:7)
我会做的是:
客户端:而不是在查询字符串中传递clientContactId。在FormData对象本身中附加键值对。将dataType设置为JSON。
var data = new FormData();
data.append("filesToDelete", "Value");
data.append("clientContactId",
(clientContactId != undefined || clientContactId != null) ? clientContactId : ''));
$.ajax({
type: "POST",
url: "/api/FileAttachment/UploadFiles",
/* ONLY IF YOU ARE UPLOADING A FILE
contentType: false,
processData: false, */
dataType: "JSON"
data: data,
success: function (result) {
},
error: function (xhr, status, p3, p4) {
}
});
服务器端:在服务器端,我们可以使用HttpContext.Current.Request
获取原始请求。
因此,我们只需使用FormData
内的HttpContext.Current.Request.Params["KeyValue"]
对象的键值即可获取值。
[HttpPost]
public void UploadFiles()
{
var filesToDelete = HttpContext.Current.Request.Params["filesToDelete"];
var clientContactId= HttpContext.Current.Request.Params["clientContactId"];
//Your code here...
}
答案 1 :(得分:0)
如果您想要使用JSON发送数据,您应该在C#中定义一个与您在JSON中传回的模型相匹配的模型。您的WebApi控制器方法将如下所示:
public HttpResponseMessage Post([FromBody]WorkerAbsenceModel absence)
{
bool ok = svc.CreateWorkerAbsence(absence);
if (ok)
{
return Request.CreateResponse(HttpStatusCode.OK);
}
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
答案 2 :(得分:0)
获取&#34; filesToDelete&#34;您可以使用JSON.NET的值。代码:
public void UploadFiles(int clientContactId)
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var jsonContent = Request.Content.ReadAsStringAsync().Result;
JObject jObject = JObject.Parse(jsonContent);
var filesToDelete = jObject["filesToDelete"];
}
答案 3 :(得分:0)
您可以创建dynamic
对象
dynamic data = JsonConvert.DeserializeObject(jsonContent);
然后您可以像
一样访问filesToDelete
data.filesToDelete;
答案 4 :(得分:0)
我认为ASP.NET网站上的这个教程可能就是你要找的东西:
Sending HTML Form Data in ASP.NET Web API: Form-urlencoded Data
根据您的示例代码,我不确定您是需要表单数据中的复杂类型,还是基于API控制器中的UploadFiles(int clientContactId)方法的单个整数。签名使您看起来只是想尝试传递一个整数。如果是这种情况,您的API控制器方法可能如下所示:
[HttpPost]
public void UploadFiles(int clientContactId)
{
//access the 'clientContactId' input parameter
int id = clientContactId;
}
你的AJAX调用看起来像这样:
$.ajax({
url: '/api/controller/UploadFiles', //your app url
type: 'POST',
data: { clientContactId: 12345 },
dataType: 'json',
success: function (result) {
//do whatever
},
error: function (result) {
//do whatever
}
});
如果您已经在JavaScript中将数据格式化为JSON,则可以在请求正文中发送。 Controller方法看起来像这样:
[HttpPost]
public void UploadFiles([FromBody] MyComplexType input)
{
}
您的AJAX调用可能如下:
$.ajax({
url: '/api/controller/UploadFiles', //your app url
type: 'POST',
data: JSON.stringify(input),
dataType: 'json',
success: function (result) {
//do whatever
},
error: function (result) {
//do whatever
}
});
查看我上面链接的教程,我认为这可能会为你解释一些事情。
答案 5 :(得分:0)
请使用以下内容获取控制器中的值,
and (
case.xsa_region is null or
(
case.xsa_region is not null
and country.X_GSA_REGION NOT IN ('Russia','Dummy', 'Other', 'DUMMY')
)
)