如何使用内置的内容类型协商并获得决策权



我想利用内置的内容协商器,只需访问就可以决定要使用什么格式化程序。我不想使用Request.Headers.Accept来检查它是json还是xml内容类型,因为这个决定涉及到很多事情。有没有一种方法可以在控制器级别检查或覆盖任何类,告诉将使用什么格式化程序或什么是请求内容类型?

提前谢谢。

您可以手动运行conneg:

var conneg = Configuration.Services.GetContentNegotiator();
        var connegResult = conneg.Negotiate(
            typeof(YOUR_TYPE), Request, Configuration.Formatters
        );

并以任何方式使用输出:

//the valid media type
var mediaType = connegResult.MediaType;
//do stuff
//the relevant formatter
var formatter = connegResult.Formatter;
//do stuff

如果你想看看发生了什么,那么安装一个TraceWriter,你就会看到conneg的作用。

TraceWriter看起来像:

    public class TraceWriter : ITraceWriter {
        public bool IsEnabled(string category, TraceLevel level) {
            return true;
        }
        public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction) {
            var rec = new TraceRecord(request, category, level);
            traceAction(rec);
            Log(rec);
        }
        private void Log(TraceRecord record) {
            Console.WriteLine(record.Message);
        }
    }

并且是这样安装的,

     config.Services.Replace(typeof(ITraceWriter), new TraceWriter());

如果你想手动调用conneg,那么你可以使用,

     config.Services.GetContentNegotiator().Negotiate(...)

Tugberk有一个关于这方面的博客。看一看

相关内容

  • 没有找到相关文章

最新更新