我正在使用一个运行winforms的非常旧的asp.net应用程序来处理POC,并为其添加REST API。到目前为止,我已经成功直到这一个端点,并且它没有在我的控制器中返回我的数据。
我在MVC框架和Web API方面有更多经验,然后是我正在使用的当前实现。我需要帮助的是如何将我的数据发送回服务器。
这是我的代码: 这相当于我的全局asax文件
class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
appBuilder.UseCors(CorsOptions.AllowAll);
appBuilder.UseWebApi(config);
}
}
的Javascript
var setPatient = function () {
$.ajax({
url: "http://localhost:9000/api/context/readPtnt?contextData=&type=context",
type: "POST",
dataType: "json",
contentType:"application/json; charset=utf-8",
data: {
jsonData: JSON.stringify({
firstName: $('#fName').val(),
lastName: $('#lName').val(),
ID: $('#ID').val(),
DOB: $('#DOB').val(),
SSN: $('#SSN').val(),
MRN: $('#MRN').val()
})
}
})
.done(successPatientSet)
.fail(errorFn)
.always(function (data, textStatus, jqXHR) {
});
}
//click
$("#btnSetPatientData").on("click", setPatient);
和我的控制器代码:
[HttpPost]
[Route("/api/context/readPtnt")]
public string ReadPtnt(string contextData, string type)
{
try
{
var patientInfo = PatientContext.Create(contextData);
我可以成功点击后端,但是我在contextData变量中什么都没有,当我尝试更改变量名时,我得到了404。我尝试过各种不同迭代的JQuery以及纯javascript Ajax调用的各种变体。我们使用的REST中间件是OWIN。我很难过,任何输入都会有所帮助。感谢。
答案 0 :(得分:1)
您需要启用CORS支持 要启用CORS支持,请将Microsoft.AspNet.WebApi.Cors NuGet包添加到项目中。
将此代码添加到您的配置中:
public static void Register(HttpConfiguration config)
{
// New code
config.EnableCors();
}
要启用跨源请求,请将[EnableCors]属性添加到Web API控制器或控制器方法中:
[EnableCors(origins: "http://example.com", headers: "*", methods: "*")]
public class TestController : ApiController
{
// Controller methods not shown...
}
全球启用 上述方法还可用于在API上启用CORS,而无需为每个控制器添加注释:
public static void Register(HttpConfiguration config)
{
var corsAttr = new EnableCorsAttribute("http://example.com", "*", "*");
config.EnableCors(corsAttr);
}
有关详细信息,请参阅官方Web API文档。