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

时间:2015-04-07 20:10:05

标签: javascript c# jquery asp.net

我正在使用一个运行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。我很难过,任何输入都会有所帮助。感谢。

1 个答案:

答案 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文档。