MVC3 Action作为一个简单的Web服务

时间:2012-02-13 20:12:06

标签: asp.net asp.net-mvc-3

我如何将此操作用作服务?

 public class HomeController : Controller {

     public string GetSomeValue(){
         return "This is some value";
     }
 }

如果我导航到此网址http://mysite.com/Home/GetSomeValue,它会返回一个字符串,不带任何html或任何标记。

那么,是什么让我不能使用这种方法作为返回有意义的服务,比如json,我可以从任何地方打电话?

如果这是可能的,我该怎么做(从另一个asp.net网站背后的代码说)?

提前致谢。

2 个答案:

答案 0 :(得分:4)

100%这样做没有错。

一个示例应用程序 - NerdDinner - 做同样的事情来装载晚餐。

请参阅http://nerddinner.codeplex.com/SourceControl/changeset/view/70027#874260了解控制器和http://nerddinner.codeplex.com/SourceControl/changeset/view/70027#874293了解javascript文件(查找NerdDinner.FindMostPopularDinners)

e.g。

C#

    // AJAX: /Search/GetMostPopularDinners
    // AJAX: /Search/GetMostPopularDinners?limit=5

    [HttpPost]
    public ActionResult GetMostPopularDinners(int? limit)
    {
        var dinners = dinnerRepository.FindUpcomingDinners();

        // Default the limit to 40, if not supplied.
        if (!limit.HasValue)
            limit = 40;

        var mostPopularDinners = from dinner in dinners
                                 orderby dinner.RSVPs.Count descending
                                 select dinner;

        var jsonDinners =
            mostPopularDinners.Take(limit.Value).AsEnumerable()
            .Select(item => JsonDinnerFromDinner(item));

        return Json(jsonDinners.ToList());
    } 

JS

NerdDinner.FindMostPopularDinners = function (limit) {
    $.post("/Search/GetMostPopularDinners", { "limit": limit }, NerdDinner._renderDinners, "json");
}

答案 1 :(得分:2)

这实际上是一个RESTful服务:

http://www.ibm.com/developerworks/webservices/library/ws-restful/

您只需构建http请求以使用此服务,您可以使用Hammock来构建此类请求:

https://github.com/danielcrenna/hammock