Httpclient Postasync 未将 XML 数据传递给 MVC 控制器,但可与 API 控制器一起使用

Httpclient Postasync not passing XML data to MVC Controller but works with API Controller

我有两个网站 ABC,XYZ.I 正在尝试将 xml 数据从 ABC 发送到 XYZ。

具体功能:我在使用 EmailID 登录后使用 ABC 应用程序。当我单击 ABC 应用程序中的按钮时,该站点应连同凭据一起重定向到 XYZ 站点。我通过 headers.

以 XML 格式将数据发送到 XYZ

ABC 网站:

    public async Task<object> Login()
    {
        string url = "http://localhost:49669/**api**/Account/PostData";
        HttpClient httpClient = new HttpClient();
        httpClient.DefaultRequestHeaders.Add("Authorization", "Basic Auth");
        string xmlString = "";
        UserDetails userDetail = new UserDetails { UserID = 1, EmailID = "name@redblacktree.com" };
        XmlDocument xmlDoc = new XmlDocument();   //Represents an XML document, 
        //Initializes a new instance of the XmlDocument class.          
        XmlSerializer xmlSerializer = new XmlSerializer(userDetail.GetType());
        var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
        XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
        namespaces.Add(string.Empty, string.Empty);
        // Creates a stream whose backing store is memory. 
        using (MemoryStream xmlStream = new MemoryStream())
        {
            xmlSerializer.Serialize(xmlStream, userDetail, emptyNs);
            xmlStream.Position = 0;
            //Loads the XML document from the specified string.
            xmlDoc.Load(xmlStream);
            xmlString = xmlDoc.InnerXml;
        }
        var stringContent = new StringContent(xmlString.ToString(), Encoding.UTF8, "application/xml");
        httpClient.DefaultRequestHeaders.Add("UserDetails", xmlString.ToString());
        var response = httpClient.PostAsync(url, stringContent).Result;
        var result = response.Content.ReadAsStringAsync().Result;
        if (response.StatusCode == HttpStatusCode.OK)
        {
            var messageContents = await response.Content.ReadAsStringAsync();
            return Content(messageContents);
        }
        return null;
    }

这里的UserDetails是一个模型class。

XYZ 网站

public class AccountController : ApiController
{
    [System.Web.Http.HttpPost]
    public HttpResponseMessage PostData(HttpRequestMessage request)
    {

        var someText = request.Content.ReadAsStringAsync().Result;
        var header1 = request.Headers.Authorization;
        var header2 = request.Headers.GetValues("UserDetails");
        return new HttpResponseMessage(); 
    }

如果我 post 连接到 API 控制器,它就可以工作。如果它是一个普通的 MVC 控制器,它是不工作的。谁能告诉我为什么。

我正在尝试 post 到 MVC 控制器,因为我发现很难将 POST 数据从 API 控制器获取到 MVC 控制器。因此,如果我可以直接 post 到 MVC Controller,它会简化我的工作。有帮助吗?

已解决!

只需提供 return type as ActionResult 即可解决我的问题。不必要地我把代码复杂化了。

public class AccountController : Controller      
{    
[System.Web.Http.HttpPost]       
public ActionResult PostData()
    {
        var data = HttpContext.Request.Headers["UserDetails"];
        return null;
    }   
}  

谢谢!