[英]AngularJS , REST, C# Service, 405 - Post Method Not Allowed
[英]C# JSON POST connect (Method not allowed)
我无法连接到JSON服务器。 在用户手册中:
该接口被实现为标准的HTTP服务。 使用该服务需要通过“登录”方法进行身份验证。 会话ID成功返回,除非另有说明,否则必须在每个函数调用中传递该会话ID。
例:
登录
说明:用于验证用户。
网址:/登录
签名:引导登录(字符串ID,字符串用户名,字符串密码)
手册完
我写了这段代码:
var webAddr = "https://xxx/Login";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{\"Login\":[{"
+ "\"id\" : 1213213,"
+ "\"username\" : asdasdasd,"
+ "\"password\" : \"adasdsadasd\","
+ "}]}";
streamWriter.Write(json);
streamWriter.Flush();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
MessageBox.Show(result.ToString());
}
消息是:不允许使用方法。 如何从该服务器发送和接收数据?
您的JSON格式不正确。 JSON应该如下所示:
{"id":"1213213","username":"asdasdasd","password":"adasdsadasd"}
注意:每个名称和值都用引号引起来。 而且“登录”不应成为JSON的一部分。
但是,问题确实在于您是手动执行所有操作。 而是让.NET为您格式化JSON并处理HTTP请求。 为此,请为参数创建一个结构:
class Login
{
public string id { get; set; }
public string username { get; set; }
public string password { get; set; }
}
使用NuGet可以添加对“ Json.Net”和“ Microsoft ASP.NET Web API客户端库”的引用。 现在,您可以编写以下代码:
static async Task Login()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://www.censored.de/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.Timeout = TimeSpan.FromSeconds(30);
Login l = new Login() { id = "12345", password = "abcde", username = "safsdfasdf" };
var sTemp = JsonConvert.SerializeObject(l); // DEBUG: Just so I can see the JSON
var response = await client.PostAsJsonAsync("/censored/Service.svc/Login", l);
Guid g;
if (response.IsSuccessStatusCode)
{
g = await response.Content.ReadAsAsync<Guid>(); // This gives you the GUID
}
//DEBUG:
// var rawResponse = await response.Content.ReadAsStringAsync();
// Console.WriteLine(response);
}
}
请注意,我使用了“异步”和“等待”关键字。 如果您不熟悉调用异步函数,则可以暂时将“ await”行更改为:
var response = await client.PostAsJsonAsync("/censored/Service.svc/Login", l).Result;
这将导致此消息出现400错误的请求。
{"ErrorMessage":"Die Anmeldedaten sind ungültig.","StackTrace":null}
Google告诉我的意思是凭据错误。 我假设这是对这种用户/密码组合的期望。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.