如何从HTTP上下文对象获取Post数据 - javascript

我正在使用运行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);
    }
}

Java脚本

    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。我很困惑,任何输入都会有所帮助。谢谢。

参考方案

您需要启用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文档。

jQuery AJAX成功数据仅解析最后一个JSON节点的奇怪问题 - javascript

所以我有以下jQuery代码:function updateOrderSummary(orderID) { var returnString = orderID; $.ajax({ url: "library/getOrderSummary.php", type: "POST", data: ({returnStrin…

jQuery ajax发布电子邮件字段 - javascript

我不确定为什么我无法发布电子邮件字段的内容,这是我的代码。<html> <head> <title></title> <script src="//code.jquery.com/jquery-1.11.2.min.js"></script> </head>…

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

jQuery val函数在隐藏字段上不起作用? - javascript

这是我的HTML代码:<div style='display:none;' id='allformid'> <div> <form action='#'> <input type='text' name='name' …

Javascript-Urls的奇怪字符串比较行为 - javascript

最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com‏/&#…