【发布时间】:2015-04-26 22:01:29
【问题描述】:
对于这个新项目,我们决定使用ASP.NET MVC 4 作为我们的展示层和WebApi 2 作为服务层。这个想法是 - 当用户与 UI 交互并发送一些请求时,MVC 控制器正在接收这个调用,如果有某种响应信息,则从 MVC 控制器调用WebApi,其中WebApi 是完全不同的解决方案,理论上它可能与 MVC 解决方案在物理上不在同一个地方。
对于 MVC 部分,我有这个控制器:
public async Task<ActionResult> Index()
{
return View("index", await GetUserAsync());
}
readonly string uri = "http://localhost:51120/api/user";
protected async Task<List<User>> GetUserAsync()
{
using (HttpClient httpClient = new HttpClient())
{
return JsonConvert.DeserializeObject<List<User>>(
await httpClient.GetStringAsync(uri)
);
}
}
然后我创建了一个ASP.NET Empty Web Application 解决方案。创建解决方案时,我从Nuget 安装了WebApi 2,因此我的项目具有非常基本的结构。我手动创建了Controllers、Models 和Views 目录。在Controllers 我有一个文件:
public class UserController : ApiController
{
public List<User> GetStringAsync()
{
return new List<User> {new User { Name = "Peter", Age = 41}};
}
}
在Models 我有这个:
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
当我右键单击View 文件夹时,我选择安装Empty view (without model)。所以基本上这就是我的设置。当我开始解决方案时,我得到了这个:
HTTP 错误 403.14 - 禁止 Web 服务器配置为不列出 这个目录的内容。
最可能的原因:没有为 请求的 URL,并且服务器上未启用目录浏览。
如果有必要,我会发布其他内容。我的问题是 - 我该怎么做。如果我只是使用WebApi 模板创建一个 MVC 项目,我想一切都会正常工作,但是这个点的全部意义就消失了。我希望能够将 WebApi 与 MVC 解决方案分开托管,甚至是物理上的并且仅发送和接收呼叫。
【问题讨论】:
-
您是否在 API 项目中注册了 WebApi 路由?
-
不,从字面上看,我所做的一切都在我的帖子中进行了描述。你能帮我解决这个问题吗?
-
当我尝试使用
config.Routes.MapHttpRoute和routeTemplate时出现错误,所以我用routes.MapRoute和url更改了它们,但仍然无法正常工作.. -
假设这是一个路由问题(我的第一个猜测),您最好使用完整模板创建一个一次性项目。 WebApi 包有多个,我用 WebApi 还不足以告诉你需要什么。
标签: c# asp.net asp.net-mvc asp.net-web-api