繁体   English   中英

Httpclient Postasync不会将XML数据传递到MVC Controller,但可以与API Controller一起使用

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

我有两个网站ABC和XYZ。我正在尝试将XML数据从ABC发送到XYZ。

要具体说明功能:使用EmailID登录后,我正在使用ABC应用程序。 当我单击ABC应用程序中的按钮时,该站点应随凭证一起重定向到XYZ站点。 我正在通过标头以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是一个模型类。

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(); 
    }

如果我要发布到API控制器,则可以使用。 如果是普通的MVC控制器,则它不起作用。 谁能告诉我为什么。

我试图发布到MVC控制器,因为我发现很难将POST数据从API控制器获取到MVC控制器。 因此,如果我可以直接发布到MVC Controller,则可以简化我的工作。 有什么帮助吗?

解决了!

简单地通过提供返回类型作为ActionResult解决了我的问题。 不必要地,我使代码复杂化。

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

谢谢 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM