我试图在MVC 4上使用RESTful来给我一个我可以在WP / Android / Iphone上使用的API,所以对于初学者来说(这个方法将在以后重新制作,这仅用于测试目的)< / p>
我有一个WP应用程序与服务器通信并向它发送一个json对象并使用restclient接收一个json对象
RestClient client = new RestClient();
client.BaseUrl = "http://*****.***/API/Account/Login";
RestRequest request = new RestRequest();
request.Method = Method.POST;
request.RequestFormat = DataFormat.Json;
User user = new User
{
UserName = "muhcow",
Password = "123456"
};
request.AddBody(user);
client.ExecuteAsync(request, response => {
System.Diagnostics.Debug.WriteLine("jo");
});
然后我有我的服务器代码,我首先尝试制作一个普通的控制器,然后只是制作一个名为account的控制器和一个名为login的动作,使用一个httppost,并且工作正常,但从我能读到的不是通往做好休息!
所以我尝试将控制器继承自apicontroller,但现在我遇到的问题甚至被路由到LoginController中的Post动作
所以post在Domain \ API \ Login \ LoginController
中后期行动就是这样
public string Post(Login loginModel)
{
LoginResponse loginResponse = new LoginResponse();
if (Membership.ValidateUser(loginModel.UserName, loginModel.Password))
{
loginResponse.Success = true;
loginResponse.Token = "11111111111111111";
return Json.Encode(loginResponse);
}
loginResponse.Success = false;
loginResponse.Error = 1;
return Json.Encode(loginResponse);
}
但是当前代码未被命中(使用断点检查)
我还没有改变MapRoute,所以只是
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"API_default",
"API/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
答案 0 :(得分:1)
简短的回答是,您需要使用RouteCollectionExtensions设置ApiController
特定路线,就像这样(而不是您拥有的路线):
context.Routes.MapHttpRoute(
name: "API_default",
routeTemplate: "API/{controller}/{action}/{id}",
defaults: new { action = "Index", id = RouteParameter.Optional}
);
只是快速说明“不是做REST的方式”评论 - 这实际上是一个非常热门的话题。我不会过分担心你RESTful是怎样的。考虑RESTful架构有助于解决的问题,看看它是否符合您要解决的问题(以及您希望采用这些原则的程度)。
那里有很多很棒的文献,但是我发现Martin Fowler的this post特别有助于我解决它。