C# MVC Web API:不允许使用405方法
因此,我陷入了一种奇怪的行为,那就是,我能够使用C# MVC Web API:不允许使用405方法,c#,html,json,asp.net-web-api2,C#,Html,Json,Asp.net Web Api2,因此,我陷入了一种奇怪的行为,那就是,我能够使用Postman(chrome插件)或RESTClient(Firefox扩展)发送(或发布)数据 但无法从项目外部的html文件发送。在chrome中打开html时显示以下错误: OPTIONS http://localhost:1176/api/user/ 405 (Method Not Allowed) XMLHttpRequest cannot load http://localhost:1176/api/user/. Invalid HT
Postman(chrome插件)
或RESTClient(Firefox扩展)
发送(或发布)数据
但无法从项目外部的html文件发送。在chrome中打开html时显示以下错误:
OPTIONS http://localhost:1176/api/user/ 405 (Method Not Allowed)
XMLHttpRequest cannot load http://localhost:1176/api/user/. Invalid HTTP status code 405
我不明白为什么会发生这种情况。以下是详细信息,您可能需要帮助我解决错误:
UserController.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPIv2.Models;
namespace WebAPIv2.Controllers
{
public class UserController : ApiController
{
static IUserRepository userRepository = new UserRepository();
[HttpGet]
public List<TableUser> GetAllUsers()
{
return userRepository.GetAll();
}
[HttpGet]
public HttpResponseMessage GetUser(int id)
{
TableUser user = userRepository.Get(id);
if (user == null)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "User Not found for the Given ID");
}
else
{
return Request.CreateResponse(HttpStatusCode.OK, user);
}
}
[HttpPost]
public HttpResponseMessage PostUser(TableUser user)
{
user = userRepository.Add(user);
var response = Request.CreateResponse<TableUser>(HttpStatusCode.Created, user);
string uri = Url.Link("DefaultApi", new { id = user.UserId });
response.Headers.Location = new Uri(uri);
return response;
}
[HttpPut]
public HttpResponseMessage PutUser(int id, TableUser user)
{
user.UserId = id;
if (!userRepository.Update(user))
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Unable to Update the User for the Given ID");
}
else
{
return Request.CreateResponse(HttpStatusCode.OK);
}
}
[HttpDelete]
public HttpResponseMessage DeleteProduct(int id)
{
userRepository.Remove(id);
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebAPIv2.Models
{
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebAPIv2.Models
{
interface IUserRepository
{
List<TableUser> GetAll();
TableUser Get(int id);
TableUser Add(TableUser user);
void Remove(int id);
bool Update(TableUser user);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebAPIv2.Models
{
public class UserRepository : IUserRepository
{
MastarsFriendsMVCDatabaseEntities userEntities;
public UserRepository()
{
userEntities = new MastarsFriendsMVCDatabaseEntities();
}
public List<TableUser> GetAll()
{
//throw new NotImplementedException();
return userEntities.TableUsers.ToList();
}
public TableUser Get(int id)
{
//throw new NotImplementedException();
var users = userEntities.TableUsers.Where(x => x.UserId == id);
if (users.Count() > 0)
{
return users.Single();
}
else
{
return null;
}
}
public TableUser Add(TableUser user)
{
//throw new NotImplementedException();
if (user == null)
{
throw new ArgumentNullException("item");
}
userEntities.TableUsers.Add(user);
userEntities.SaveChanges();
return user;
}
public void Remove(int id)
{
//throw new NotImplementedException();
TableUser user = Get(id);
if (user != null)
{
userEntities.TableUsers.Remove(user);
userEntities.SaveChanges();
}
}
public bool Update(TableUser user)
{
//throw new NotImplementedException();
if (user == null)
{
throw new ArgumentNullException("student");
}
TableUser userInDB = Get(user.UserId);
if (userInDB == null)
{
return false;
}
userEntities.TableUsers.Remove(userInDB);
userEntities.SaveChanges();
userEntities.TableUsers.Add(user);
userEntities.SaveChanges();
return true;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Web.Http;
namespace WebAPIv2
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
//config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
// jQuery.support.cors = true;
// $.ajax({
// url: "http://localhost:1176/api/user/1",
// headers: {"Accept": "application/json"},
// type: "GET",
// success: function(data) {
// alert(JSON.stringify(data));
// },
// error: function() {
// alert("Error");
// }
// });
// });
var user = {
UserName: "Disha",
Password: "disha123",
FirstName: "Disha",
LastName: "Vora",
Email: "disha@pixielit.com"
};
$.ajax({
url: 'http://localhost:1176/api/user/',
type: 'POST',
data: JSON.stringify(user),
crossDomain: true,
headers: {"Accept":"application/json" , "Content-Type":"application/json"},
success: function(data) {
alert('User added Successfully');
},
error: function() {
alert('User not Added');
}
});
});
</script>
</body>
</html>
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301879
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<appSettings></appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Request-Headers:" value="*" />
<add name="Access-Control-Request-Method:" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<!--<add name="Allow" value="*"/>-->
</customHeaders>
</httpProtocol>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<directoryBrowse enabled="true" />
</system.webServer>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="MastarsFriendsMVCDatabaseEntities" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string="data source=WIN-WWU3DMLR6PX\PIXIELIT;initial catalog=MastarsFriendsMVCDatabase;persist security info=True;user id=sa;password=sa_12345;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
IUserRepository.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPIv2.Models;
namespace WebAPIv2.Controllers
{
public class UserController : ApiController
{
static IUserRepository userRepository = new UserRepository();
[HttpGet]
public List<TableUser> GetAllUsers()
{
return userRepository.GetAll();
}
[HttpGet]
public HttpResponseMessage GetUser(int id)
{
TableUser user = userRepository.Get(id);
if (user == null)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "User Not found for the Given ID");
}
else
{
return Request.CreateResponse(HttpStatusCode.OK, user);
}
}
[HttpPost]
public HttpResponseMessage PostUser(TableUser user)
{
user = userRepository.Add(user);
var response = Request.CreateResponse<TableUser>(HttpStatusCode.Created, user);
string uri = Url.Link("DefaultApi", new { id = user.UserId });
response.Headers.Location = new Uri(uri);
return response;
}
[HttpPut]
public HttpResponseMessage PutUser(int id, TableUser user)
{
user.UserId = id;
if (!userRepository.Update(user))
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Unable to Update the User for the Given ID");
}
else
{
return Request.CreateResponse(HttpStatusCode.OK);
}
}
[HttpDelete]
public HttpResponseMessage DeleteProduct(int id)
{
userRepository.Remove(id);
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebAPIv2.Models
{
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebAPIv2.Models
{
interface IUserRepository
{
List<TableUser> GetAll();
TableUser Get(int id);
TableUser Add(TableUser user);
void Remove(int id);
bool Update(TableUser user);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebAPIv2.Models
{
public class UserRepository : IUserRepository
{
MastarsFriendsMVCDatabaseEntities userEntities;
public UserRepository()
{
userEntities = new MastarsFriendsMVCDatabaseEntities();
}
public List<TableUser> GetAll()
{
//throw new NotImplementedException();
return userEntities.TableUsers.ToList();
}
public TableUser Get(int id)
{
//throw new NotImplementedException();
var users = userEntities.TableUsers.Where(x => x.UserId == id);
if (users.Count() > 0)
{
return users.Single();
}
else
{
return null;
}
}
public TableUser Add(TableUser user)
{
//throw new NotImplementedException();
if (user == null)
{
throw new ArgumentNullException("item");
}
userEntities.TableUsers.Add(user);
userEntities.SaveChanges();
return user;
}
public void Remove(int id)
{
//throw new NotImplementedException();
TableUser user = Get(id);
if (user != null)
{
userEntities.TableUsers.Remove(user);
userEntities.SaveChanges();
}
}
public bool Update(TableUser user)
{
//throw new NotImplementedException();
if (user == null)
{
throw new ArgumentNullException("student");
}
TableUser userInDB = Get(user.UserId);
if (userInDB == null)
{
return false;
}
userEntities.TableUsers.Remove(userInDB);
userEntities.SaveChanges();
userEntities.TableUsers.Add(user);
userEntities.SaveChanges();
return true;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Web.Http;
namespace WebAPIv2
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
//config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
// jQuery.support.cors = true;
// $.ajax({
// url: "http://localhost:1176/api/user/1",
// headers: {"Accept": "application/json"},
// type: "GET",
// success: function(data) {
// alert(JSON.stringify(data));
// },
// error: function() {
// alert("Error");
// }
// });
// });
var user = {
UserName: "Disha",
Password: "disha123",
FirstName: "Disha",
LastName: "Vora",
Email: "disha@pixielit.com"
};
$.ajax({
url: 'http://localhost:1176/api/user/',
type: 'POST',
data: JSON.stringify(user),
crossDomain: true,
headers: {"Accept":"application/json" , "Content-Type":"application/json"},
success: function(data) {
alert('User added Successfully');
},
error: function() {
alert('User not Added');
}
});
});
</script>
</body>
</html>
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301879
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<appSettings></appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Request-Headers:" value="*" />
<add name="Access-Control-Request-Method:" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<!--<add name="Allow" value="*"/>-->
</customHeaders>
</httpProtocol>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<directoryBrowse enabled="true" />
</system.webServer>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="MastarsFriendsMVCDatabaseEntities" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string="data source=WIN-WWU3DMLR6PX\PIXIELIT;initial catalog=MastarsFriendsMVCDatabase;persist security info=True;user id=sa;password=sa_12345;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
index.html:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPIv2.Models;
namespace WebAPIv2.Controllers
{
public class UserController : ApiController
{
static IUserRepository userRepository = new UserRepository();
[HttpGet]
public List<TableUser> GetAllUsers()
{
return userRepository.GetAll();
}
[HttpGet]
public HttpResponseMessage GetUser(int id)
{
TableUser user = userRepository.Get(id);
if (user == null)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "User Not found for the Given ID");
}
else
{
return Request.CreateResponse(HttpStatusCode.OK, user);
}
}
[HttpPost]
public HttpResponseMessage PostUser(TableUser user)
{
user = userRepository.Add(user);
var response = Request.CreateResponse<TableUser>(HttpStatusCode.Created, user);
string uri = Url.Link("DefaultApi", new { id = user.UserId });
response.Headers.Location = new Uri(uri);
return response;
}
[HttpPut]
public HttpResponseMessage PutUser(int id, TableUser user)
{
user.UserId = id;
if (!userRepository.Update(user))
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Unable to Update the User for the Given ID");
}
else
{
return Request.CreateResponse(HttpStatusCode.OK);
}
}
[HttpDelete]
public HttpResponseMessage DeleteProduct(int id)
{
userRepository.Remove(id);
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebAPIv2.Models
{
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebAPIv2.Models
{
interface IUserRepository
{
List<TableUser> GetAll();
TableUser Get(int id);
TableUser Add(TableUser user);
void Remove(int id);
bool Update(TableUser user);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebAPIv2.Models
{
public class UserRepository : IUserRepository
{
MastarsFriendsMVCDatabaseEntities userEntities;
public UserRepository()
{
userEntities = new MastarsFriendsMVCDatabaseEntities();
}
public List<TableUser> GetAll()
{
//throw new NotImplementedException();
return userEntities.TableUsers.ToList();
}
public TableUser Get(int id)
{
//throw new NotImplementedException();
var users = userEntities.TableUsers.Where(x => x.UserId == id);
if (users.Count() > 0)
{
return users.Single();
}
else
{
return null;
}
}
public TableUser Add(TableUser user)
{
//throw new NotImplementedException();
if (user == null)
{
throw new ArgumentNullException("item");
}
userEntities.TableUsers.Add(user);
userEntities.SaveChanges();
return user;
}
public void Remove(int id)
{
//throw new NotImplementedException();
TableUser user = Get(id);
if (user != null)
{
userEntities.TableUsers.Remove(user);
userEntities.SaveChanges();
}
}
public bool Update(TableUser user)
{
//throw new NotImplementedException();
if (user == null)
{
throw new ArgumentNullException("student");
}
TableUser userInDB = Get(user.UserId);
if (userInDB == null)
{
return false;
}
userEntities.TableUsers.Remove(userInDB);
userEntities.SaveChanges();
userEntities.TableUsers.Add(user);
userEntities.SaveChanges();
return true;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Web.Http;
namespace WebAPIv2
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
//config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
// jQuery.support.cors = true;
// $.ajax({
// url: "http://localhost:1176/api/user/1",
// headers: {"Accept": "application/json"},
// type: "GET",
// success: function(data) {
// alert(JSON.stringify(data));
// },
// error: function() {
// alert("Error");
// }
// });
// });
var user = {
UserName: "Disha",
Password: "disha123",
FirstName: "Disha",
LastName: "Vora",
Email: "disha@pixielit.com"
};
$.ajax({
url: 'http://localhost:1176/api/user/',
type: 'POST',
data: JSON.stringify(user),
crossDomain: true,
headers: {"Accept":"application/json" , "Content-Type":"application/json"},
success: function(data) {
alert('User added Successfully');
},
error: function() {
alert('User not Added');
}
});
});
</script>
</body>
</html>
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301879
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<appSettings></appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Request-Headers:" value="*" />
<add name="Access-Control-Request-Method:" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<!--<add name="Allow" value="*"/>-->
</customHeaders>
</httpProtocol>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<directoryBrowse enabled="true" />
</system.webServer>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="MastarsFriendsMVCDatabaseEntities" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string="data source=WIN-WWU3DMLR6PX\PIXIELIT;initial catalog=MastarsFriendsMVCDatabase;persist security info=True;user id=sa;password=sa_12345;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
提供头衔
$(文档).ready(函数(){
//jQuery.support.cors=true;
//$.ajax({
//url:“http://localhost:1176/api/user/1",
//标题:{“接受”:“应用程序/json”},
//键入:“获取”,
//成功:功能(数据){
//警报(JSON.stringify(数据));
// },
//错误:函数(){
//警报(“错误”);
// }
// });
// });
变量用户={
用户名:“迪沙”,
密码:“disha123”,
名字:“迪沙”,
姓:“沃拉”,
电子邮件:“disha@pixielit.com"
};
$.ajax({
网址:'http://localhost:1176/api/user/',
键入:“POST”,
数据:JSON.stringify(用户),
跨域:是的,
标题:{“接受”:“应用程序/json”,“内容类型”:“应用程序/json”},
成功:功能(数据){
警报(“用户添加成功”);
},
错误:函数(){
警报(“未添加用户”);
}
});
});
Web.config:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPIv2.Models;
namespace WebAPIv2.Controllers
{
public class UserController : ApiController
{
static IUserRepository userRepository = new UserRepository();
[HttpGet]
public List<TableUser> GetAllUsers()
{
return userRepository.GetAll();
}
[HttpGet]
public HttpResponseMessage GetUser(int id)
{
TableUser user = userRepository.Get(id);
if (user == null)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "User Not found for the Given ID");
}
else
{
return Request.CreateResponse(HttpStatusCode.OK, user);
}
}
[HttpPost]
public HttpResponseMessage PostUser(TableUser user)
{
user = userRepository.Add(user);
var response = Request.CreateResponse<TableUser>(HttpStatusCode.Created, user);
string uri = Url.Link("DefaultApi", new { id = user.UserId });
response.Headers.Location = new Uri(uri);
return response;
}
[HttpPut]
public HttpResponseMessage PutUser(int id, TableUser user)
{
user.UserId = id;
if (!userRepository.Update(user))
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Unable to Update the User for the Given ID");
}
else
{
return Request.CreateResponse(HttpStatusCode.OK);
}
}
[HttpDelete]
public HttpResponseMessage DeleteProduct(int id)
{
userRepository.Remove(id);
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebAPIv2.Models
{
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebAPIv2.Models
{
interface IUserRepository
{
List<TableUser> GetAll();
TableUser Get(int id);
TableUser Add(TableUser user);
void Remove(int id);
bool Update(TableUser user);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebAPIv2.Models
{
public class UserRepository : IUserRepository
{
MastarsFriendsMVCDatabaseEntities userEntities;
public UserRepository()
{
userEntities = new MastarsFriendsMVCDatabaseEntities();
}
public List<TableUser> GetAll()
{
//throw new NotImplementedException();
return userEntities.TableUsers.ToList();
}
public TableUser Get(int id)
{
//throw new NotImplementedException();
var users = userEntities.TableUsers.Where(x => x.UserId == id);
if (users.Count() > 0)
{
return users.Single();
}
else
{
return null;
}
}
public TableUser Add(TableUser user)
{
//throw new NotImplementedException();
if (user == null)
{
throw new ArgumentNullException("item");
}
userEntities.TableUsers.Add(user);
userEntities.SaveChanges();
return user;
}
public void Remove(int id)
{
//throw new NotImplementedException();
TableUser user = Get(id);
if (user != null)
{
userEntities.TableUsers.Remove(user);
userEntities.SaveChanges();
}
}
public bool Update(TableUser user)
{
//throw new NotImplementedException();
if (user == null)
{
throw new ArgumentNullException("student");
}
TableUser userInDB = Get(user.UserId);
if (userInDB == null)
{
return false;
}
userEntities.TableUsers.Remove(userInDB);
userEntities.SaveChanges();
userEntities.TableUsers.Add(user);
userEntities.SaveChanges();
return true;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Web.Http;
namespace WebAPIv2
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
//config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>-->
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
// jQuery.support.cors = true;
// $.ajax({
// url: "http://localhost:1176/api/user/1",
// headers: {"Accept": "application/json"},
// type: "GET",
// success: function(data) {
// alert(JSON.stringify(data));
// },
// error: function() {
// alert("Error");
// }
// });
// });
var user = {
UserName: "Disha",
Password: "disha123",
FirstName: "Disha",
LastName: "Vora",
Email: "disha@pixielit.com"
};
$.ajax({
url: 'http://localhost:1176/api/user/',
type: 'POST',
data: JSON.stringify(user),
crossDomain: true,
headers: {"Accept":"application/json" , "Content-Type":"application/json"},
success: function(data) {
alert('User added Successfully');
},
error: function() {
alert('User not Added');
}
});
});
</script>
</body>
</html>
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301879
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<appSettings></appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Request-Headers:" value="*" />
<add name="Access-Control-Request-Method:" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<!--<add name="Allow" value="*"/>-->
</customHeaders>
</httpProtocol>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<directoryBrowse enabled="true" />
</system.webServer>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="MastarsFriendsMVCDatabaseEntities" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string="data source=WIN-WWU3DMLR6PX\PIXIELIT;initial catalog=MastarsFriendsMVCDatabase;persist security info=True;user id=sa;password=sa_12345;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
WebApi可能会阻止CORS请求。要在WebApi上启用CORS,请使用Microsoft.AspNet.WebApi.CORS包。有关更多详细信息,请选中“确定”。在@martennis答案的帮助下解决了这个问题,但进行了一些更正
每件事都很完美,只是要注意,我们需要在Package Manager控制台中输入以下命令:
Install-Package Microsoft.AspNet.WebApi.Cors –IncludePrerelease
我的WebApiConfig.cs更新如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Cors;
namespace WebApiRESTfulwithJSON
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
于是,解决了问题
现在,我将能够从任何地方使用我的web服务,从移动应用程序、web应用程序或桌面应用程序调用它
例如,如何从头开始创建它们,我在这里写了我的第一篇博客(…尽管是android开发者,但从未尝试过为android写博客:-p无论如何…)
链接:无需网络配置,只需添加:
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
从控制器类中删除“using System.Web.MVC”为我解决了这个问题。看看这是否有帮助@Milindantwar先生,我已经在我的项目中应用了这个解决方案。但是,没有成功…:(解决了我的问题!