将html数据类型发布到webapi post方法有一些问题。
这是邮政编码
$('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的错误消息{“消息”:“错误有 发生。“,”ExceptionMessage“:”没有MediaTypeFormatter可用 从具有媒体类型的内容中读取“LeadModel”类型的对象 '多部分/格式数据' “” ExceptionType。 “:” System.InvalidOperationException “ ”堆栈跟踪“:” 在System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent) content,Type type,IEnumerable
1 formatters, IFormatterLogger formatterLogger)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable
1格式化程序,IFormatterLogger formatterLogger)\ r \ n at System.Web.Http.ModelBinding.FormatterParameterBinding.ExecuteBindingAsync(ModelMetadataProvider metadataProvider,HttpActionContext actionContext,CancellationToken cancelToken)\ r \ n at System.Web.Http.Controllers.HttpActionBinding<> C_ DisplayClass1.b _0(HttpParameterBinding parameterBinder)\ r \ n at System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext()\r\n at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator
1 enumerator,CancellationToken cancellationToken)“}
有任何线索如何解决这个问题?我们不想做jquery帖子,因为我们必须允许发布跨域。
答案 0 :(得分:1)
POST 方法需要 LeadModel 对象,但您要发送一个包含2个字段的对象(" 操作 "和" 输入"),因此,预期的类应该是:
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帖子,因为我们必须允许post cross 域。
但你正在做的AJAX调用是使用POST($ .post与$ .ajax相同,POST为类型)
希望它有所帮助。