我尝试创建一个自托管服务,作为我的应用程序中日志的中心点。所以我在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);
}
});
答案 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",