我目前在学习如何用OWIN和Katana创建C#服务器。PostAsJsonAsync找不到请求的URI
我想回应一个POST,但不幸的是它没有找到该函数。
所以这是我:
这是一个用户侧类,它是通过POST发送用户数据(用户名和密码)(PostAsJsonAsync())。
public class UserRegisterClient
{
string _accessToken;
Uri _baseRequestUri; // http://localhost:8080
public UserRegisterClient(Uri baseUri, string accessToken)
{
_accessToken = accessToken;
_baseRequestUri = new Uri(baseUri, "api/register/");
}
// Handy helper method to set the access token for each request:
void SetClientAuthentication(HttpClient client)
{
client.DefaultRequestHeaders.Authorization
= new AuthenticationHeaderValue("Bearer", _accessToken);
}
public async Task<HttpStatusCode> AddUserAsync(string username, string password)
{
HttpResponseMessage response;
using (var client = new HttpClient())
{
SetClientAuthentication(client);
response = await client.PostAsJsonAsync(
_baseRequestUri.ToString(), new KeyValuePair<string, string>(username, password));
}
return response.StatusCode;
}
}
附加信息:
在AddUserAsync功能client.PostAsJsonAsync()返回以下结果:
response =
{
StatusCode: 404,
ReasonPhrase: 'Not Found',
Version: 1.1,
Content: System.Net.Http.StreamContent,
Headers:
{
Date: Sat, 11 Jul 2015
18:16:53 GMT Server: Microsoft-HTTPAPI/2.0 Content-Length: 190
Content-Type: application/json; charset=utf-8
}
} System.Net.Http.HttpResponseMessage
在服务器侧,我有一个控制器,这看起来像这样:
[RoutePrefix("api/register/")]
class RegisterController : ApiController
{
public async Task<IHttpActionResult> Post(KeyValuePair<string, string> userData)
{
// I never get inside here
}
}
在服务器端,在启动类,你可以看到路由设置:
private HttpConfiguration ConfigureWebApi()
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
"DefaultApi",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
return config;
}
编辑:改变路线到RoutePrefix我的控制器类之前。
感谢您对新属性路由的建议。是的,我同意,如果我必须在每个人面前设置路线,它会更容易和更清洁! – Snowman
Ooops,我没有意识到有些人在我面前有正确的解决方案。 – LeftyX