【问题标题】:How can I create a content based router in asp.net web api如何在 asp.net web api 中创建基于内容的路由器
【发布时间】:2022-01-12 06:24:16
【问题描述】:

我有一个项目,我需要根据正文将 Http Post 消息路由到特定的 Rest api。正文既可以是 xml 也可以是 json,而且我不知道预先的消息类型,所以我需要解包消息并检查它的某些部分,以便能够将其路由到正确的端点。

我在想我可以配置某种路由规则来检查消息中是否存在一个或多个属性值,但我不确定解压消息并检查这些属性值的最佳方法是什么属性值。

有谁知道是否有任何库已经这样做了,或者我可以使用 RegEx 或其他东西来创建规则吗?

【问题讨论】:

    标签: c# asp.net-web-api


    【解决方案1】:

    据我了解,您需要根据消息的类型重新发送消息:XML 或 JSON。您可能可以通过检查标题来做到这一点。

    如果客户端正确实施 POST,则它们应该包含 Content-Type 标头,该标头应该是 application/jsonapplication/xml,或者可能是 text/jsontext/xml,后者使用频率较低。

    然后您可以检查此标头并进一步重新发送Request.Body

        public async Task<IActionResult> Post()
        {
            var contentType = Request.Headers.ContentType.FirstOrDefault();
            Trace.TraceInformation(contentType);
    
            if (contentType == null)
                return BadRequest();
    
            // get uri
            var uri = contentType == "application/json" ? "/json" : "/xml";
    
            // resend stream
            var response = await WriteHttpClientStream(uri, contentType, Request.Body);
    
            // send response back
            await WriteResponseStream(statusCode: 201, contentType, await response.Content.ReadAsStreamAsync());
    
            // just to return something
            return new EmptyResult();
        }
    

    如果您需要使用正文中的某些数据来决定路由的位置,您可能应该完整阅读它并解析 JSON/XML 以找出路由的位置。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2017-11-20
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      相关资源
      最近更新 更多