OWIN中带有CORS的自托管WEB API

时间:2015-07-21 13:05:30

标签: cors asp.net-web-api2 self-hosting

我尝试创建一个自托管服务,作为我的应用程序中日志的中心点。所以我在OWIN中创建了自托管服务并安装了我的服务。该服务工作正常,我可以通过JQuery通过AJAX调用使用GET方法。我的问题来自POST方法,因为我想将许多字段发布到WEB API(最好是包含所有内容的对象),但它根本不起作用......我收到此错误消息

415 - > "不支持的媒体类型"

"请求包含实体主体但没有Content-Type标头。推断的媒体类型' application / octet-stream'此资源不支持。"," ExceptionMessage":"没有MediaTypeFormatter可用于读取类型' Log'来自内容与媒体类型' application / octet-stream'。"," ExceptionType":" System.Net.Http.UnsupportedMediaTypeException",&#34 ;栈跟踪":"在System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent内容,类型类型,IEnumerable' 1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)\ r \ n在System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync( HttpRequestMessage请求,类型类型,IEnumerable`1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)"

我可以发送没有参数的POST,它可以工作......但我需要这些参数!

这是我的代码:

LOG CLASS

public class Log
{
    public string Message { get; set; }
    public string ApplicationName { get; set; }
}

WEB API CONTROLLER

public class MessagingController : ApiController
{
    [HttpPost]
    public void Log([FromBody] Log log)
    {
        var path = Program.ConfigurationService.GetConfigValue(ConfigurationService.RootPathConfig);

        using (var writter = new StreamWriter(path + "TEST.txt"))
        {
            writter.Write(log.ApplicationName + " -> " + log.Message);
        }
    }
}

AJAX调用WEB API

    var obj = {
        applicationName: "APP",
        message: "MESS"
    }

    $.ajax({
        type: "POST",
        cache: false,
        url: "http://localhost:9001/api/messaging/log",
        data: JSON.stringify(obj),
        dataType: 'json',
        contentType: "application/json; charset=utf-8; Access-Control-Allow-Origin;",
        async: true,
        success: function(resp) {
            console.log(resp);
         },
         error: function(err) {
            console.log(err);
         }
    });

1 个答案:

答案 0 :(得分:1)

好的,我在本教程中找到了答案!

http://www.codeproject.com/Articles/742532/Using-Web-API-Individual-User-Account-plus-CORS-En

我删除了AJAX请求的一些数据,现在它完美地完成了它的工作!!

这是我的新AJAX:

var obj = {
    applicationName: "APP",
    message: "MESS"
}

$.ajax({
    type: "POST",
    url: "http://localhost:9001/api/messaging/log",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    data: obj,
    success: function(resp) {
        console.log(resp);
     },
     error: function(err) {
        console.log(err);
     }
});

好的Fiddler我发现他真正需要的ContentType是:

contentType:" application / x-www-form-urlencoded;字符集= UTF-8",