繁体   English   中英

将数据类型html发布到ASP.NET WebAPI

[英]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.WhereSelectArrayIterator 2.MoveNext()\\r\\n at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator 2.MoveNext()\\r\\n at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator 1枚举器,CancellationToken 2.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM