vs2013 webweb api areass是干什么用的

Web API概述 | 猿教程(TM)
Content Menu ▼
WebAPI教程
Web API概述
在我们理解Web API之前,让我们看看什么是API(应用程序编程接口)。百度百科的定义API:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。简而言之,API是拥有一组函数组成的某种接口,它允许程序员访问应用程序的特定的功能或数据,操作系统或其他服务。Web API顾名思义,是一个可以使用HTTP协议访问的API。这是一个概念,而不是技术。我们可以使用不同的技术来构建Web API,如Java、.net等。例如,Twitter REST api提供编程访问读写数据的使用,我们可以将Twitter的功能集成到自己的应用程序。ASP.NET Web APIAsp.Net Web API是一个可扩展的框架,用于构建基于HTTP的服务,这种服务可以在不同平台上的不同应用程序中访问:例如web应用、窗体应用、移动应用等等。它和ASP.NET MVC有相同的工作方式,但Web Api应用程序接收到请求后返回数据,而不是像MVC返回html视图。它就像一个webservice 或WCF服务,但例外在于它只支持HTTP协议。ASP.NET Web API特性ASP.NET Web API 是一个构建基于restful服务的理想平台。ASP.NET Web API 是基于Asp.Net,支持ASP.Net 请求/响应管道ASP.NET Web API 有良好的路由机制。ASP.NET Web API 支持不同格式的响应数据,内置支持JSON、XML BSON格式。ASP.NET Web API 可以部署非常方便。ASP.NET Web API框架包括新的HttpClient,他可以与Web API服务器通信。HttpClient可以在ASP.Net MVC服务器端,Windows Form应用程序,控制台应用程序或其他应用程序中使用。ASP.NET Web API版本web api版本支持的.net framework版本对应的MVC版本支持的VS版本Web API 1.0.NET Framework 4.0ASP.NET MVC 4VS 2010Web API 2.0.NET Framework 4.5ASP.NET MVC 5VS 2012,VS 2013ASP.NET Web API VS WCFweb apiwcf开源,支持.net framework支持.net framework只支持HTT通信协议支持HTTP,TCP,UDP以及自定义通信协议等良好的路由机制来匹配url与对应接口基于Attribute来匹配使用类似于Asp.net MVC的路由规则和Controller模型使用Service,契约等不支持可靠的消息传递和事务。支持可靠的消息传递和事务。可以使用HttpConfiguration 来配置Web Api,不一定需要web.config配置使用web.config和Attribute来配置一个服务适合构建RESTful服务。支持构建RESTful服务但有局限性什么时候用WCF如果你使用的是.net framework3.5,可以选择使用wcf,以为Web Api不支持.net 3.5及更低的版本。如果你需要支持多种协议如HTTP、TCP、命名管道等,可以选择WCF服务。如果你想建立满足WS - *标准的可靠的消息传递、交易、信息安全方面的服务,可以选择WCF服务。如果您想要使用请求-应答,单向或者双向消息通信模式,可以选择WCF。什么时候用Web API如果您使用的是.Net Framework4.0或以上版本,可以选择Web API。如果你想建立一个仅支持HTTP协议的服务,可以选择Web API。如果你想构建基于restful的HTTP服务,可以选择Web API。如果你已经很了解Asp.Net MVC,可以选择Web API。我们在接下来的部分从使用VS创建一个简单的Web Api项目开始Web Api之旅。
版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程)
作者:卿文刚
本文标题:
本文地址:13:40 提问
我在Vs中写了一个webApi,把它部署到iis10之后会出现以下错误,有没有大神帮我看一下?
{"Message":"出现错误。","ExceptionMessage":"在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: SQL Network Interfaces, error: 50 - 发生了 Local Database Runtime 错误。无法创建自动实例。有关错误详细信息,请参阅 Windows 应用程序事件日志。\r\n)","ExceptionType":"System.Data.SqlClient.SqlException","StackTrace":"
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling)\r\n
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)\r\n
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)\r\n
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)\r\n
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)\r\n
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)\r\n
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)\r\n
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)\r\n
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions)\r\n
在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry)\r\n
在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 retry)\r\n
在 System.Data.SqlClient.SqlConnection.Open()\r\n
在 System.Data.Entity.Infrastructure.Interception.InternalDispatcher1.Dispatch\r\n
在 System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext)\r\n
在 System.Data.Entity.SqlServer.SqlProviderServices.&&c__DisplayClass33.b__32()\r\n
在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.&&c__DisplayClass1.b__0()\r\n
在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute\r\n
在 System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action1 act)\r\n
在 System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript)\r\n
在 System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable1 commandTimeout, StoreItemCollection storeItemCollection)\r\n
在 System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection connection)\r\n
在 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)\r\n
在 System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)\r\n
在 System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func3 createMigrator, ObjectContext objectContext)\r\n
在 System.Data.Entity.Database.Create(DatabaseExistenceState existenceState)\r\n
在 System.Data.Entity.CreateDatabaseIfNotExists1.InitializeDatabase(TContext context)\r\n
在 System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)\r\n
在 System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()\r\n
在 System.Data.Entity.Internal.RetryAction1.PerformAction(TInput input)\r\n
在 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action1 action)\r\n
在 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)\r\n
在 System.Data.Entity.Internal.Linq.InternalSet1.Initialize()\r\n
在 System.Data.Entity.Internal.Linq.InternalSet1.get_InternalContext()\r\n
在 System.Data.Entity.Infrastructure.DbQuery1.System.Linq.IQueryable.get_Provider()\r\n
在 System.Linq.Queryable.Select\r\n
在 WebApi1111250.Controllers.DataModelsController.GetDataModels() 位置 c:\Users\李昊阳\Documents\Visual Studio 2013\Projects\WebApi1111250\WebApi1111250\Controllers\DataModelsController.cs:行号 40\r\n
在 lambda_method(Closure , Object , Object[] )\r\n
在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.&&c__DisplayClass10.b__9(Object instance, Object[] methodParameters)\r\n
在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n
在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n
在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n
在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"}
按赞数排序
李昊阳同学,我估计问题可能有以下几种情况,你在本地连接应该可以吧,那就是线上配置问题
1:数据库相关服务没启动
2:权限问题
3:配置文件连接字符串不对
很可能是iis服务器无权访问数据库服务器;或者iis服务的启动用户无权登录数据库。
按vs的时候应该会默认装数据库,你可以找找,或者直接在vs里找找你的数据库在哪
这个webApi的工程在VS中运行是没问题的,也能从数据库中查询到数据;我感觉不是数据库的问题,上图数数据库的一些属性,有没有大牛帮我看一下?
一般在本地测试的时侯需要把Application Pool权限设成本地最高权限,然后在iis上面装一个database manager来测试连接,接下就可以一步一步定位问题了。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐其他回答(3)
可以参考下wiki上的说法:
收获园豆:5
园豆:5688
web api是基于http协议的api
收获园豆:20
园豆:35418
园豆:35418
api就只指接口,包括各种接口,范围更广一些,包括了webapi。
webapi就是利用web实现的api
收获园豆:10
园豆:5373
清除回答草稿
&&&您需要以后才能回答,未注册用户请先。所谓概述,也就是总结一些WEB API常用的使用用法。MVC APIWEB是一个轻量级的服务接口,完全符合RestFul框架设计,每个URL代表一种资源,使用方便,没有WCF那么庞大,但是麻雀虽小五脏俱全,WEBAPI提供的内容很值得研究;API请求方式有GET、POST、PUT、DELETE。所以WEBAPI对应的APIControl提供的接口也分为以上4个类型。
1、WEBAPI创建:
    使用的时候也很简单,利用VS2013新建项目,选择MVC4,让后选择WEBAPI,创建完成,这就是默认的MVC WEBAPI项目;
2、WEBAPI分析:
  WEB API默认的路由是:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
这个是默认提供的路由,通过路由,我们不难发现通过Control下的id进行匹配查找,所以接下的代码也是根据ID进行处理;由于服务请求的方式GET、POST、DELETE、PUT,所以每个APIControl也就提供这4中类型,针对这个轻量级框架,这4中方式处理好,一个APIControl应对自己的逻辑也就足够了。
代码展示:
public class ProductController : ApiController
static List&Product& products =new List&Product& () {
new Product{Id=1,Name="Nokia Lumia 1520",Category="移动电话",Price=3500},
new Product{Id=2,Name="Lenovo Thinkpad T430S",Category="便携式计算机",Price=8000},
new Product{Id=3,Name="锤子手机",Category="移动电话",Price=3300},
new Product{Id=4,Name="Wii",Category="电视游戏机",Price=1000},
new Product{Id=5,Name="Xbox 360",Category="电视游戏机",Price=3200}
/// &summary&
/// &/summary&
/// &returns&&/returns&
public IEnumerable&Product& GetAllProducts()
return products.OrderBy(p =& p.Id);
/// &summary&
/// &/summary&
/// &param name="id"&&/param&
/// &returns&&/returns&
public Product GetProductById(int id)
Product product = products.FirstOrDefault(p =& p.Id == id);
if (product==null)
var resp = new HttpResponseMessage(HttpStatusCode.NotFound);
throw new HttpResponseException(resp);
/// &summary&
/// &/summary&
/// &param name="productName"&&/param&
/// &returns&&/returns&
public Product GetProductByName(string productName,string category)
Product product = products.FirstOrDefault(p =& p.Name.Contains(productName) && p.Category == category);
if (product == null)
var resp = new HttpResponseMessage(HttpStatusCode.NotFound);
throw new HttpResponseException(resp);
public IEnumerable&Product& GetAllProductsByCategory(string category)
if (category.Equals("--请选择--"))
IEnumerable&Product& productList = products.Where(p =& string.Equals(p.Category, category, StringComparison.OrdinalIgnoreCase));
return productList.OrderBy(p =& p.Id);
public bool PostProduct(Product product)
int index = products.FindIndex(p =& p.Name == product.Name);
if (index != -1)
return false;
product.Id = products.Max(p =& p.Id) + 1;
products.Add(product);
return true;
//public IEnumerable&Product& PostProductByCategory(string Category)
//if (currpate.Category.Equals("--请选择--"))
//IEnumerable&Product& productList = products.Where(p =& string.Equals(p.Category, currpate.Category, StringComparison.OrdinalIgnoreCase));
//// productList.OrderBy(p =& p.Id);
//public IEnumerable&Product& PostProductByCategory22([FromBody] JObject currpate)
dynamic json =
JObject curtxt = json.
//if (currpate.Category.Equals("--请选择--"))
//IEnumerable&Product& productList = products.Where(p =& string.Equals(p.Category, currpate.Category, StringComparison.OrdinalIgnoreCase));
//// productList.OrderBy(p =& p.Id);
public bool PutProduct(int id, [FromBody]Product product)
int index = products.FindIndex(p =& p.Id == id);
if (index == -1)
return false;
products.RemoveAt(index);
products.Add(product);
return true;
/// &summary&
/// DELETE
/// &/summary&
/// &param name="id"&&/param&
/// &returns&&/returns&
public bool DeleteProduct(int id)
Product product = products.FirstOrDefault(p =& p.Id == id);
if (product == null)
return false;
products.Remove(product);
return true;
代码分析:
以上就是一个简单的ControlAPI,通过代码分析,一个APIControl也就包含4中请求方式,准对GET方式请求,我们就要仔细区分ID参数进行逻辑判断。
看看客户端JS请求的方式:
&script type="text/javascript"&
$(function () {
$InitData();
$bindClick();
$InitData = function () {
$.getJSON("../api/Product", function (data) {
if (data != null)
if ($("#resultList").length & 0) {
$("#resultList").remove();
var html = "&ol id='resultList' class='round'&";
$.each(data, function (key, value) {
html += "&li class='one'&&h5&" + value.Name + "&/h5&类型:" + value.Category
+ " 价格:" + value.Price + "
| &a href='#' onclick='editProduct(" + value.Id + ")'&编辑&/a&&a href='#' onclick='deleteProduct(" + value.Id + ")'&删除&/a&&/li&";
html += "&/ol&";
$("#result").append(html);
$bindClick = function () {
// 01.按产品类型搜索产品
$("#productTypes").bind("change", function () {
//$.getJSON("../api/Product", { category: $(this).find("option:selected").text() }, function (data) {
if (data != null) {
$("#resultList").remove();
var html = "&ol id='resultList' class='round'&";
$.each(data, function (key, value) {
html += "&li class='one'&&h5&" + value.Name + "&/h5&类型:" + value.Category
+ " 价格:" + value.Price + "
| &a href='#' onclick='editProduct(" + value.Id + ")'&编辑&/a&&a href='#' onclick='deleteProduct(" + value.Id + ")'&删除&/a&&/li&";
html += "&/ol&";
$("#result").append(html);
var prodcut = {
Category: "移动电话",
Price:253,
var prodcut2 = {
Category: "移动电话2",
Price: 253,
//$.ajax({
type: "POST",
url: "../api/Product/PostProductByCategory",
data: JSON.stringify({ prot: prodcut }),
contentType: "application/json",
dataType:"xml",
success: function (data) {
console.log(data);
if (data != null) {
$("#resultList").remove();
var html = "&ol id='resultList' class='round'&";
$.each(data, function (key, value) {
html += "&li class='one'&&h5&" + value.Name + "&/h5&类型:" + value.Category
+ " 价格:" + value.Price + "
| &a href='#' onclick='editProduct(" + value.Id + ")'&编辑&/a&&a href='#' onclick='deleteProduct(" + value.Id + ")'&删除&/a&&/li&";
html += "&/ol&";
$("#result").append(html);
type: "POST",
url: "../api/Product",
data: { Category: $("#editProductType").find("option:selected").text()},
success: function (data) {
console.log(data);
if (data != null) {
$("#resultList").remove();
var html = "&ol id='resultList' class='round'&";
$.each(data, function (key, value) {
html += "&li class='one'&&h5&" + value.Name + "&/h5&类型:" + value.Category
+ " 价格:" + value.Price + "
| &a href='#' onclick='editProduct(" + value.Id + ")'&编辑&/a&&a href='#' onclick='deleteProduct(" + value.Id + ")'&删除&/a&&/li&";
html += "&/ol&";
$("#result").append(html);
// 02.按产品名搜索产品
$("#btnSearchByName").bind("click", function () {
var searchName = $("#productName").val();
if (searchName == "") {
showMsg("提示", "您还没有输入要搜索的产品名称");
$.getJSON("../api/Product", { productName: searchName, category: '电视游戏机' }, function (data) {
if (data != null) {
$("#resultList").remove();
var html = "&ol id='resultList' class='round'&";
html += "&li class='one'&&h5&" + data.Name + "&/h5&类型:" + data.Category
+ " 价格:" + data.Price + "
| &a href='#' onclick='editProduct(" + data.Id + ")'&编辑&/a&&a href='#' onclick='deleteProduct(" + data.Id + ")'&删除&/a&&/li&";
html += "&/ol&";
$("#result").append(html);
clearText();
// 03.搜索全部产品信息
$("#btnSearchAll").bind("click", $InitData);
// 04.新增一个产品信息
$("#btnPostProduct").bind("click", function () {
var productName = $("#newProductName").val();
var productCategory = $("#newProductType").find("option:selected").text();
var productPrice = $("#newProductPrice").val();
if (productName == "") {
showMsg("提示", "请输入产品名称");
else if (productCategory == "" || productCategory == "--请选择--") {
showMsg("提示", "请选择产品类型");
else if (productPrice == "") {
showMsg("提示", "请输入产品价格");
else if (isNaN(productPrice)) {
showMsg("提示", "产品价格请输入数字类型");
$.post("../api/Product", {
Name: productName,
Category: productCategory,
Price: productPrice
}, function (data) {
if (data != null && data == true) {
$InitData();
clearText();
showMsg("提示", "添加新产品操作成功");
showMsg("提示", "添加新产品操作失败");
// 07.修改一个产品信息
$("#btnPutProduct").bind("click", function () {
var productId = $("#hiddProductId").val();
type: "PUT",
url: "../api/Product/" + productId,
Id: productId,
Name: $("#editProductName").val(),
Category: $("#editProductType").find("option:selected").text(),
Price: $("#editProductPrice").val()
success: function (data) {
if (data == true) {
$InitData();
$("#myEditModal").window("close");
showMsg("提示", "您已成功修改那玩意");
showMsg("提示", "修改那玩意操作失败");
// 关闭模态对话框
$("#btnCloseModal").bind("click", function () {
$("#myEditModal").window("close");
// 05.编辑一个产品信息
function editProduct(productId) {
$.getJSON("../api/Product", { id: productId }, function (data) {
if (data != null) {
$("#hiddProductId").val(data.Id);
$("#editProductName").val(data.Name);
switch (data.Category) {
case "移动电话":
$("#editProductType").val("0");
case "便携式计算机":
$("#editProductType").val("1");
case "电视游戏机":
$("#editProductType").val("2");
$("#editProductPrice").val(data.Price);
$("#myEditModal").show();
$("#myEditModal").window({
title: "编辑产品信息",
modal: true,
collapsible: true,
minimizable: false,
maximizable: false,
resizable: false,
width: 500,
height: 220
// 06.删除一个产品信息
function deleteProduct(productId) {
$.messager.confirm("提示", "您确定要删除这玩意?", function (r) {
type: "DELETE",
url: "../api/Product/" + productId,
success: function (data) {
if (data == true) {
$InitData();
showMsg("提示", "您已成功删除那玩意");
showMsg("提示", "删除那玩意操作失败");
function showMsg(title, msg) {
$.messager.alert(title, msg, "info");
function clearText() {
$("input[type=text]").val("");
JS也就是采用数据请求的方式,Ajax请求完成数据操作。
3、WEB API路由扩展:
在MVC中,大家看到的更多的路由模式是含有Action,可是WEBAPI就没有了,当然如果想使用自定义路由模式展现Action也是可行的,注册自定义路由
public static void Register(HttpConfiguration config)
//自定义路由
config.Routes.MapHttpRoute(
name: "DefaultSprtApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
// 取消注释下面的代码行可对具有 IQueryable 或 IQueryable&T& 返回类型的操作启用查询支持。
// 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
// 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712。
//config.EnableQuerySupport();
// 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
// 有关详细信息,请参阅: http://www.asp.net/web-api
config.EnableSystemDiagnosticsTracing();
  这这个里面,我们就把Action 加载里面了,有了这个Action,那么我们的APIControl又该怎么操作,才能获取我们想要的数据。不着急,这就展示APIControl代码
public IEnumerable&Product& PostProductByCategory22([FromBody] JObject currpate)
dynamic json =
JObject curtxt = json.
//if (currpate.Category.Equals("--请选择--"))
//IEnumerable&Product& productList = products.Where(p =& string.Equals(p.Category, currpate.Category, StringComparison.OrdinalIgnoreCase));
return// productList.OrderBy(p =& p.Id);
代码参数中多了一个FromBody,FromBody有什么功能那?查询CSDN发现,FromBody能够强制APIControl通过客户端或者Body读取参数,所以看看JS代码:
var prodcut = {
Category: "移动电话",
Price:253,
var prodcut2 = {
Category: "移动电话2",
Price: 253,
type: "POST",
url: "../api/Product/PostProductByCategory",
data: JSON.stringify({ prot: prodcut }),
contentType: "application/json",
dataType:"xml",
success: function (data) {
console.log(data);
if (data != null) {
$("#resultList").remove();
var html = "&ol id='resultList' class='round'&";
$.each(data, function (key, value) {
html += "&li class='one'&&h5&" + value.Name + "&/h5&类型:" + value.Category
+ " 价格:" + value.Price + "
| &a href='#' onclick='editProduct(" + value.Id + ")'&编辑&/a&&a href='#' onclick='deleteProduct(" + value.Id + ")'&删除&/a&&/li&";
html += "&/ol&";
$("#result").append(html);
使用这个地方这种方式,客户端需要注意事项:
1、需要设置请求content-Type。这里设置为contentType: "application/json";
2、发送的数据格式JSon.
服务端ControlAPI也需要注意,这个只能设置一个类型为FromBody参数,所以逻辑一定要封装好。
&参考文章:
阅读(...) 评论()

我要回帖

更多关于 vs2015 webapi 的文章

 

随机推荐