【问题标题】:POSTing into Web API from C# (MVC)从 C# (MVC) 发布到 Web API
【发布时间】:2013-11-09 07:51:03
【问题描述】:

C#(from the controller(MVC))POSTing value into a Web API method using a standard jQuery $.post 的等价物是什么,

我使用标准的 jQuery $.post 让它工作,像这样:

  $.post('/api/reports', { AgentId: AgentId, ReportName: ReportName, Params: Params, StatsEmailedId: StatsEmailedId, HeaderName: HeaderName,
        RankBy: RankBy, SoldCountsInclude: SoldCountsInclude, SortBy: SortBy, IncludeCo: IncludeCo, DisplayTop: DisplayTop, UserOffice: UserOffice
    },
function (data) { ....
      }
});

【问题讨论】:

  • 我不确定我是否理解 - 你的意思是你想从你的控制器调用你自己的 WebAPI 方法之一?
  • 没错。 Webapi 与我要从中调用它的项目位于一个单独的项目中。

标签: jquery .net asp.net-mvc asp.net-web-api http-post


【解决方案1】:

如果你想从你的控制器调用不同项目/其他地方的 WebApi 方法,我会使用 WebClient。您可以使用它从 C# 进行任何网络调用。具体查看它的 UploadData 方法:

http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx

【讨论】:

    【解决方案2】:

    我不能 100% 确定我完全理解这个问题。如果您的意思是如何从 jquery(而不是 api)发布到控制器,那么这是一个简单的更改:

      $.post('@Url.Action("actioname","controller")', { AgentId: AgentId, ReportName: ReportName, Params: Params, StatsEmailedId: StatsEmailedId, HeaderName: HeaderName,
            RankBy: RankBy, SoldCountsInclude: SoldCountsInclude, SortBy: SortBy, IncludeCo: IncludeCo, DisplayTop: DisplayTop, UserOffice: UserOffice
        },
    function (data) { ....
          }
    });
    

    如果在控制器内部调用内部方法,那么您只需调用它,就好像在控制器内部调用另一个方法调用一样。

    进一步提出的一点是,您的 js 可能位于其自己的文件中,在这种情况下,您不能使用 @Url.Action() 的东西。在这种情况下,我建议使用 jquery 数据属性并将目标 URL 放置到您的关键 dom 元素之一上,然后使用源文件中的 .data('your-attr') 从您的 js 中定位它。效果很好,绝对是我的推荐。

    [编辑] - 虽然问题与WebClient 相关,但我认为值得通过将数据属性用于外部 js 实现来证明我的意思:

    //the cshtml code
    <button id="myUpdateButton" data-target-url="@Url.Action("youraction", "controller")">
    
    //the js code (assumes click on myUpdateButton)
    var targetUrl = $(this).data('target-url');
    // then use targetUrl in place of the 1st param in the `$.post` method.
    

    不管怎样,我就是个 ott :-)

    【讨论】:

    • 注意,Url.Action 技术仅适用于您的 javascript 不在 .js 文件中(它需要在 .cshtml 文件中)。
    • 我想从 MVC 控制器 (c#) 发布到 Web API。
    • 好的,在这种情况下,假设一个不同的项目,只需将其视为外部资源并使用 WebClient 库
    【解决方案3】:

    正如其他人建议的那样,您可以使用 WebClient 类。您也可以尝试几种替代方案。看看 HttpClient 和 RestSharp,两者都可以通过 nuget 获得。我个人将 RestSharp 与许多 3rd 方 API 以及我自己的 API 一起使用,效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多