1

我正在尝试在 MVC 4 上使用 RESTful 来给我一个可以在 WP/Android/Iphone 上使用的 API,所以对于初学者来说(这个方法稍后会重新制作,这只是为了测试目的)

我有一个 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 操作

所以帖子在 Domain\API\Login\LoginController

而post动作是这样的

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

1 回答 1

1

简短的回答是,您需要使用RouteCollectionExtensionsApiController设置一个特定的路线,如下所示(而不是您拥有的路线):

context.Routes.MapHttpRoute(
   name: "API_default",
   routeTemplate: "API/{controller}/{action}/{id}",
   defaults: new { action = "Index", id = RouteParameter.Optional}
);

只是对“不是做 REST 的方式”评论的快速说明 - 这实际上是一个非常热门的话题。我不会太担心你的RESTful程度。考虑 RESTful 架构有助于解决什么问题,看看它是否与您正在解决的问题相匹配(以及您希望在何种程度上采用这些原则)。

那里有很多很棒的文献,但我发现Martin Fowler 的这篇文章对理解它特别有帮助。

于 2012-04-27T22:59:14.860 回答