在MVC 5项目中同化Web Api控制器

时间:2014-12-11 08:53:14

标签: c# asp.net-mvc asp.net-mvc-4

我精通MVC 5,但web api 2对我来说是新手。我正在尝试为我的MVC项目添加一个webapi控制器,但我无法访问它的路径。 Iv在一个名为webapi的新文件夹中添加了一个web api控制器,控制器的名称是searchcontroller,Inside My MVC 5 Project。 我无法访问它的路径,应该是: / API /搜索/获取。 我认为这可能与我在全球Ajax中的App Start有关:

请帮忙! 以下是app start中的代码:

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        GlobalConfiguration.Configure(config =>
        {
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
        name: "ApiById",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional },
        constraints: new { id = @"^[0-9]+$" }
    );

            config.Routes.MapHttpRoute(
                name: "ApiByName",
                routeTemplate: "api/{controller}/{action}/{name}",
                defaults: null,
                constraints: new { name = @"^[a-z]+$" }
            );

            config.Routes.MapHttpRoute(
                name: "ApiByAction",
                routeTemplate: "api/{controller}/{action}",
                defaults: new { action = "Get" }
            );
        });

控制器代码:

 public class WebAPISearchReultsController : ApiController
{
    public IEnumerable<ICE.Logic.ArticleSearchResult> Get(string searchQuery)
    {
        return SearchLogic.Instance.GetArticleSearchResults(searchQuery);
    }
}

1 个答案:

答案 0 :(得分:0)

我会像这样构建API方法......

[Route("api/webapisearchreults")]
[HttpGet]
public HttpResponseMessage Get([FromUri]string searchQuery)
{
   var data = SearchLogic.Instance.GetArticleSearchResults(searchQuery);
   var response = Request.CreateResponse(HttpStatusCode.OK, data);
   return response;
 }

然后您可以检查数据,如果没有数据或异常等,您可以检查返回的HttpStatusCode。您可以将status code设置为有意义的内容。

编辑:WebApiConfig

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}