首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET Core MVC InputFormatter在控制器中的应用

.NET Core MVC InputFormatter在控制器中的应用
EN

Stack Overflow用户
提问于 2018-08-23 17:52:49
回答 2查看 278关注 0票数 2

我是.NET核心的新手。我正在尝试设置一个小的MVC应用程序。其中我实现了一个具有已定义路由的控制器。

代码语言:javascript
复制
[Route("api/ota")]
public class OTAController : ControllerBase
{
    [HttpPost]
    public async Task<ContentResult> EndPoint([FromBody] object otaHotelRatePlanNotifRQ)
    {
        Console.WriteLine("Something is posted");
        ...

对于这个控制器,我实现了一个自定义的输入格式化程序,并在Startup.cs中注册了它。

代码语言:javascript
复制
        services.AddMvc(options => {
            options.InputFormatters.Insert(0, new RawRequestBodyInputFormatter());
        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1)

但是现在这个输入格式化程序适用于任何控制器和指定的路由。有没有办法只将格式化程序应用于指定的控制器/路由。

EN

回答 2

Stack Overflow用户

发布于 2020-06-25 16:16:27

添加您的输入格式化程序作为第一个格式化程序InputFormatters.Insert(0,new StringRawRequestBodyFormatter()),然后在此格式化程序中的CanRead方法中检查正在绑定的参数是否具有您在FromBody旁边指定的自定义属性

代码语言:javascript
复制
 public override Boolean CanRead(InputFormatterContext context)
    {
        if (context == null) 
            throw new ArgumentNullException(nameof(context));
        
        var contentType = context.HttpContext.Request.ContentType;
        if (supportedMimes.Contains(contentType) && 
            context.Metadata is DefaultModelMetadata mt &&
            mt.Attributes.ParameterAttributes.Any(a=>a.GetType().Equals(typeof(RawJsonAttribute))))
            return true;
        else
            return false;
    }

控制器操作:public IActionResult BeginExportToFile([RawJson,FromBody] string expSvcConfigJsonStr)

因此,简单地说,此格式化程序将仅用于受支持的mimes和具有自定义属性的参数。希望能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2019-03-01 20:28:49

是的,这可以通过在Startup.cs方法中添加一个新的路由来实现,默认情况下您需要为您想要的控制器添加一个新的路由:

代码语言:javascript
复制
app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

注意:顺序很重要。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51983012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档