Asp.net mvc 4 如何使用MVC4WebAPI服务
我是WebAPI世界的新手,我在新的MVC4WebAPI中看到了很多应用的潜力。我已经生成了一个WCF Web服务,但计划了解Web API及其Web服务功能。现在,MVC4WebAPI服务更像是前端吗?我通过在MVC4WebAPI中在线跟踪一些示例编写了一个示例服务,但是如何仅在一个基本控制台应用程序中使用该服务呢?我发现使用它的唯一方法是使用HttpClient,还有其他方法吗?我习惯于使用ASP.NET Web服务和WCF Web服务作为引用,您可以在引用中将其作为服务引用,然后可以查看其所有对象、属性以进行适当的调用 如果web api为post方法请求一个对象“任务”,会发生什么情况?例如,我如何填充一个对象“任务”并将其发回web api?正如在WCF中一样,由于WSDL,我能够看到“任务”对象及其属性,因此我能够填充它们并将其发送回服务。在WebAPI服务中,这是如何完成的 webservice将在内部使用,拥有WebAPI服务值得吗 非常感谢您帮助我澄清有关web api服务的一些问题。--根据评论编辑--- 此屏幕截图显示了您可以接近的可能结构。当然,您可以选择最适合您的应用程序的设计 因此,Asp.net mvc 4 如何使用MVC4WebAPI服务,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我是WebAPI世界的新手,我在新的MVC4WebAPI中看到了很多应用的潜力。我已经生成了一个WCF Web服务,但计划了解Web API及其Web服务功能。现在,MVC4WebAPI服务更像是前端吗?我通过在MVC4WebAPI中在线跟踪一些示例编写了一个示例服务,但是如何仅在一个基本控制台应用程序中使用该服务呢?我发现使用它的唯一方法是使用HttpClient,还有其他方法吗?我习惯于使用ASP.NET Web服务和WCF Web服务作为引用,您可以在引用中将其作为服务引用,然后可以查看其
ControllerLib
是一个单独的类库项目,作为服务参考
引入主项目(屏幕截图中未显示,但应位于SecondMVCapApplication项目的References文件夹中)。两个控制器文件(HomeController.cs
和LocationController.cs
是实现控制器类的控制器文件,它与使用模板创建新MVC4应用程序时的控制器文件相同)
因此,对于您关于是否存在SVC文件的问题。不。在MVC4中,无论应用程序是一个项目还是多个项目的组合,都没有SVC文件(除非我弄错了)。在secondmvcapapplication
中,有一个名为RouteConfig.cs
的文件,该文件保存路由URL,只要您添加服务引用并且存在控制器功能。代码将运行。我展示的示例屏幕截图还包括一个WebApiConfig.cs
文件。如果需要,您可以使用该文件为移动设备编写API。因此,常规的RouteConfig.cs
处理网站请求,而WebApiConfig.cs
处理API请求
值得注意的是:如果您将一个模型项目作为一个单独的项目使用(我知道您会这样做,因为它是一个M-V-C项目…DUH!!)。确保将连接字符串放在web.config主项目中(在本例中为secondmvcapapplication
)。我记得我在这个问题上被困了3天(每个8小时),试图解决这个问题。希望你不要碰到它
---结束编辑---
以下对您问题的回答主要基于我的知识,可能对所有用户都适用,也可能不对
- MVC4WebAPI服务更像前端吗
- 如何仅在一个基本的控制台应用程序中使用该服务
服务库
。如果您沿着服务库
的道路走下去,那么您只需使用添加引用
选项将您的API/项目/您所称的任何内容引入到项目中。(为此,我通常将所有项目放在单个解决方案中,并让VisualStudio管理构建顺序,因为我懒得编写构建脚本)
同样,在控制台应用程序中使用web服务时也可以应用相同的逻辑
- 我发现使用它的唯一方法是使用HttpClient,还有其他方法吗
- 如果web api为post方法请求一个对象“任务”,会发生什么情况?例如,我如何填充一个对象“任务”并将其发回web api
- webservice将在内部使用,拥有WebAPI服务值得吗
希望所有这些都有帮助。您可以创建自己的客户端服务类
public class ClientService
{
#region async helper methods
private static string m_mediaTypeHeaderValue= "application/json";
static HttpClient client = new HttpClient();
static HttpClient createHttpClientInstance()
{
return client ?? new HttpClient();
}
// SELECT
internal static async Task<T> Get<T>(string endpoint)
{
client= createHttpClientInstance();
var response = await client.GetAsync(endpoint);
string content = await response.Content.ReadAsStringAsync();
return await Task.Run(() => JsonConvert.DeserializeObject<T>(content));
}
// INSERT
static async Task<T> Post<T>(string endpoint, object data)
{
client = createHttpClientInstance();
var httpContent = new StringContent(JsonConvert.SerializeObject(data));
httpContent.Headers.ContentType = new MediaTypeHeaderValue(m_mediaTypeHeaderValue);
var response = await client.PostAsync(endpoint, httpContent);
string content = await response.Content.ReadAsStringAsync();
return await Task.Run(() => JsonConvert.DeserializeObject<T>(content));
}
// UPDATE
static async Task<T> Put<T>(string endpoint, object data)
{
client = createHttpClientInstance();
var httpContent = new StringContent(JsonConvert.SerializeObject(data));
httpContent.Headers.ContentType = new MediaTypeHeaderValue(m_mediaTypeHeaderValue);
var response = await client.PutAsync(endpoint, httpContent);
string content = await response.Content.ReadAsStringAsync();
return await Task.Run(() => JsonConvert.DeserializeObject<T>(content));
}
// DELETE
static async Task<T> Delete<T>(string endpoint)
{
client = createHttpClientInstance();
var response = await client.DeleteAsync(endpoint);
string content = await response.Content.ReadAsStringAsync();
return await Task.Run(() => JsonConvert.DeserializeObject<T>(content));
}
#endregion
}