[英]Posting datatype html to ASP.NET WebAPI
将html数据类型发布到webapi发布方法时遇到一些问题。
这是邮政编码
$('form#katalog').submit(function(e) {
e.preventDefault();
var data = {
action: 'katalog-callback',
input: {
Firstname: $('form#katalog #firstname').val(),
Lastname: $('form#katalog #lastname').val(),
Address: $('form#katalog #address').val(),
Zip:$('form#katalog #zip').val(),
City: $('form#katalog #city').val(),
Phone: $('form#katalog #tel').val(),
Mobile: $('form#katalog #mobile').val(),
Email: $('form#katalog #email').val(),
BuildStart: $('form#katalog #build-start').val(),
Plot: $('form#katalog #plot').val(),
BuildCity: $('form#katalog #build-city').val()
}
};
var request = $.ajax({
url: "/ajax",
type: "POST",
data: data,
dataType: "html"
});
request.done(function(result) {
if (result == 1) {
alert('Thx!')
} else {
alert('Error')
}
});
});
这是WebAPI方法
public string Post(LeadModel lead)
{
try
{
svc.AddLead(lead);
}
catch
{
return "exception";
}
return "true";
这是模型
公共类LeadModel
{
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Address { get; set; }
public string Zip { get; set; }
public string City { get; set; }
public string Phone { get; set; }
public string Mobile { get; set; }
public string Email { get; set; }
public string BuildStart { get; set; }
public string Plot { get; set; }
public string BuildCity { get; set; }
}
这是来自IIS的错误消息{“ Message”:“发生错误。”,“ ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为'multipart / form-data的内容中读取类型为'LeadModel'的对象'。“,” ExceptionType“:” System.InvalidOperationException“,” StackTrace“:”位于System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent内容,类型,IEnumerable
1 formatters, IFormatterLogger formatterLogger)\\r\\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable
1格式化程序,IFormatterLogger formatterLogger)在System.Web.Http.ModelBinding.FormatterParameterBinding.ExecuteBindingAsync(ModelMetadataProvider元数据提供者,HttpActionContext actionContext,CancelationToken取消令牌) \\ r \\ n在System.Web.Http.Controllers.HttpActionBinding。<> c_ DisplayClass1.b _0(HttpParameterBinding parameterBinder)\\ r \\ n在System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext()\\r\\n at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator
2.MoveNext()\\r\\n at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator
1枚举器,CancellationToken2.MoveNext()\\r\\n at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator
)“}
任何线索如何解决这个问题? 我们不想做一个jQuery发布,因为我们必须允许发布跨域。
POST方法期望使用LeadModel对象,但是您要发送的对象中包含2个字段(“ action ”和“ input ”),因此,期望的类应为:
public class MyModel
{
public string action {get;set;}
public LoadModel input {get;set;}
}
和您的webapi方法:
public string Post(MyModel data)
{
.......
// The input fields should be in "data.input"
.......
}
或者,您可以更改AJAX调用,使其仅传递输入字段。 喜欢:
var data = {
Firstname: $('form#katalog #firstname').val(),
Lastname: $('form#katalog #lastname').val(),
Address: $('form#katalog #address').val(),
Zip:$('form#katalog #zip').val(),
City: $('form#katalog #city').val(),
Phone: $('form#katalog #tel').val(),
Mobile: $('form#katalog #mobile').val(),
Email: $('form#katalog #email').val(),
BuildStart: $('form#katalog #build-start').val(),
Plot: $('form#katalog #plot').val(),
BuildCity: $('form#katalog #build-city').val()
}
仅供参考,您说:
我们不想做一个jQuery发布,因为我们必须允许发布跨域。
但是您正在执行的AJAX调用使用的是POST($。post与POST为类型的$ .ajax相同)
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.