在 MVC 5 项目中同化 WebApi 控制器

本文关键字:WebApi 控制器 MVC 项目 | 更新日期: 2023-09-27 18:34:04

我精通MVC 5,但Web api 2对我来说是新的。我正在尝试将 webapi 控制器添加到我的 MVC 项目中,但我无法访问它的路径。Iv'e 在一个名为 webapi 的新文件夹中添加了 Web api 控制器,控制器的名称是 searchcontroller,在我的 MVC 5 项目中。我无法访问它的路径,应该是:/api/search/get.我认为这可能与我的应用程序在全局 Ajax 中的启动有关:

请帮忙!这是应用程序启动中的代码:

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

在 MVC 5 项目中同化 WebApi 控制器

我会像这样构造 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。 您可以将状态代码设置为有意义的内容。

编辑: 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 }
        );
    }
}