Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用web api时出现问题。始终返回500服务器错误_C#_Api_Authentication_Asp.net Web Api - Fatal编程技术网

C# 调用web api时出现问题。始终返回500服务器错误

C# 调用web api时出现问题。始终返回500服务器错误,c#,api,authentication,asp.net-web-api,C#,Api,Authentication,Asp.net Web Api,我正在发出一个HttpWeb请求,POST调用url/api,并对用户名和密码进行基本身份验证。当我使用POSTMAN工具时,它会给出响应。但不确定.net代码为什么会给我内部服务器错误。我正在尝试以下操作: 注意:交换数据必须是XML格式。因此我提供了text/XML var requestXml = new XElement("transaction", new XElement("transactionId", "Dummy")); HttpWebReque

我正在发出一个HttpWeb请求,POST调用url/api,并对用户名和密码进行基本身份验证。当我使用POSTMAN工具时,它会给出响应。但不确定.net代码为什么会给我内部服务器错误。我正在尝试以下操作:

注意:交换数据必须是XML格式。因此我提供了text/XML

var requestXml = new XElement("transaction", new XElement("transactionId", "Dummy"));
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                byte[] bytes;
                bytes = System.Text.Encoding.ASCII.GetBytes(XMLSerializer(requestXml));
                request.ContentType = "text/xml; encoding=utf-8";
                request.ContentLength = bytes.Length;
                request.Method = "POST";               
                request.Headers.Add(HttpRequestHeader.Authorization, "Basic" + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("username:password")));              
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(bytes, 0, bytes.Length);
                requestStream.Close();
                HttpWebResponse response;
                response = (HttpWebResponse)request.GetResponse();
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    Stream responseStream = response.GetResponseStream();
                    string responseStr = new StreamReader(responseStream).ReadToEnd();
                    return responseStr;
                }

授权标头应设置为:

"Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("username:password")));
而不是

"Basic" + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("username:password")));

请注意Basic后面的额外空格字符。

尝试在Basic后面添加空格,即Basic在服务器端签出错误。并使用类似fiddler的东西将原始.net请求与邮递员请求进行比较