NET Core 学习——HttpResponseMessage类

背景:

微信支付回调方法:

        /// 
        /// 微信支付结果通知
        /// 
        /// 
        [HttpPost]
        [Route("WeChatNotify")]
        public HttpResponseMessage WeChatNotify()
        {
            //_httpContextAccessor.HttpContext.Request.EnableBuffering();
            //Stream stream = _httpContextAccessor.HttpContext.Request.Body;
            Request.EnableBuffering();
            Stream stream = Request.Body;

            var Result = _wechatService.ProcessNotify(stream);

            HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(Result.Item1, Encoding.GetEncoding("UTF-8"), "application/xml") };
            if (Result != null && !string.IsNullOrEmpty(Result.Item1) && !string.IsNullOrEmpty(Result.Item2) && Result.Item3 != null)
            {
                WxPayData data = new WxPayData();
                data.FromXml(Result.Item1);
                string res = data.GetValue("return_code").ToString();
                if (res.Equals("SUCCESS"))
                    ExpandNotify(Result.Item2, Result.Item3);
            }
            return result;
        }

 在测试过程中,发现微信一直回调,即使提交的xml格式数据是成功。

经研究,发现上述代码中的result返回值是一段json:

{
    "version": {
        "major": 1,
        "minor": 1,
        "build": -1,
        "revision": -1,
        "majorRevision": -1,
        "minorRevision": -1
    },
    "content": {
        "headers": [
            {
                "Key": "Content-Type",
                "Value": [
                    "application/xml; charset=utf-8"
                ]
            }
        ]
    },
    "statusCode": 200,
    "reasonPhrase": "OK",
    "headers": [],
    "trailingHeaders": [],
    "requestMessage": null,
    "isSuccessStatusCode": true
}

并不是我们要返回给微信那边的xml格式。如:


    
        
    
    
        
    

经过查询,发现一篇文章https://www.cnblogs.com/dudu/p/6872657.html

解决方案:

core2.0开始不需要文章中的第一部:

1)安装 nuget 包 Microsoft.AspNetCore.Mvc.WebApiCompatShim
2)在 Startup -> ConfigureServices 中,在 AddMvc() 之后添加 AddWebApiConventions() 即可:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().AddWebApiConventions();
}

插曲:

因为是公司项目,虽然提交SVN时已经将 .csproj上传,但是同事获取的时候“AddWebApiConventions();”报错。
可能原因包没安装上。
解决方法:将项目卸载,NET Core 学习——HttpResponseMessage类_第1张图片,然后重新加载就行了。

你可能感兴趣的:(.Net,Core)