在理想的情况下,您可以按照其他人的建议将应用程序转换为 Web api 控制器,但为了更务实,您可以实现一个临时解决方案,通过扩展仅公开所需的调用ApiController
您没有提到您当前的应用程序正在使用哪个版本的 MVC,也没有提到您当前的控制器如何将数据返回到 Web 应用程序。
因此,我假设您通过视图模型和剃刀视图返回数据。例如:
public class ProductsController : Controller
{
public void Index()
{
var view = new ProductsListView();
view.Products = _repository.GetProducts();
return View(view);
}
}
假设现在您想通过类似 REST 的 api 公开产品列表?
首先检查您是否安装了 Web api(通过 nuget)
安装包 Microsoft.AspNet.WebApi
(我再次不确定您使用的是哪个版本的 ASP.NET,因此此过程可能因版本而异)
现在在你的public void Application_Start()
GlobalConfiguration.Configure(WebApiConfig.Register);//add this before! line below
RouteConfig.RegisterRoutes(RouteTable.Routes);//this line shld already exist
and in WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我喜欢创建一个专门的folder调用 ApiControllers 并添加同名控制器;这样你就可以在不同的命名空间中使用具有相同名称的控制器:
namespace YourApp.Web.ApiControllers
{
[AllowAnonymous]
public class ProductsController : ApiController
{
[HttpGet]
public HttpResponseMessage Products()
{
var result = new ProductResult();//you could also use the view class ProductsListView
result.Products = _repository.GetProducts();
return Request.CreateResponse(httpStatusCode, result);
}
}
}
然后您可以通过以下方式访问它yourapp.com/api/products
注意,尝试减少控制器内的代码重复 - 这可以通过提取公共部分和服务类来实现。