我需要构建一个XMLCore2.0WebAPI应用程序,它能够完成定制的ASP.NET输入和输出格式设置。
我已经成功地设置了自定义输出格式化程序,而不是自定义输入格式化程序。
更确切地说,这是启动配置:
public void ConfigureServices(IServiceCollection services)
{
services
.AddMvc(opt =>
{
opt.ReturnHttpNotAcceptable = true;
opt.OutputFormatters.Clear();
opt.InputFormatters.Clear();
opt.InputFormatters.Add(new SoapInputFormatter());
opt.OutputFormatters.Add(new SoapOutputFormatter());
});
}其想法是具有自定义SOAP输入和输出格式。不,现有的XmlDataContractSerializerInputFormatter是不行的。
SoapOutputFormatter类:
public class SoapOutputFormatter : IOutputFormatter
{
public bool CanWriteResult(OutputFormatterCanWriteContext context)
{
return true;
}
public async Task WriteAsync(OutputFormatterWriteContext context)
{
var bytes = Encoding.UTF8.GetBytes(context.Object.ToString());
await context.HttpContext.Response.Body.WriteAsync(bytes, 0, bytes.Length);
}
}SoapInputFormatter类:
public class SoapInputFormatter : InputFormatter
{
public override Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
{
throw new NotImplementedException();
}
protected override bool CanReadType(Type type)
{
return true;
}
}我设置了断点,只是为了得到调用的代码,所以以后我可以实际实现有用的代码。但是SoapInputFormatter类根本没有被调用。控制员:
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody]string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}(经典的新web应用程序控制器)
我正在做Postman应用程序的帖子。没有一个帖子会击中SoapInputFormatter。
有什么建议吗?有什么主意吗?
发布于 2018-03-10 22:24:35
也有同样的问题,然后找到了这个链接:
http://www.dotnetcurry.com/aspnet-mvc/1368/aspnet-core-mvc-custom-model-binding
这基本上可以归结为文章中的以下内容:
我在POST请求中添加了FromBody,然后调用了我的自定义InputFormatter。
-Rick
发布于 2018-10-30 12:37:44
I‘我有点晚了,但您需要使用[ApiController]才能使用InputFormatter。
按要求编辑:
[ApiController]
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
....https://stackoverflow.com/questions/47025515
复制相似问题