来自其他域和计算机的 Web API Post

Web API Post from other domain and computers

我创建了一个基于 asp.net 的新 Web-API。

如果我没理解错的话,你不能从其他域 POST/GET。

我需要将此网站 API 提供给我的朋友,他们使用 php/javascript/andriod/iphone 并允许他们 POST/GET 访问我的网站 API。

有什么方法可以用 user/password 或类似的东西得到 POST/GET 吗?

对于 .NET Web API

set WebAPI basic authentications.
Articles in this issue 

http://www.asp.net/web-api/overview/security/basic-authentication

设置 WebAPI 允许跨域。 本期文章
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

示例获取 javascript AJAX 添加此行

beforeSend: function (xhr) {
    xhr.setRequestHeader ("Authorization", "Basic "+btoa(username + ':'+password);
},

btoa 库是 https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/btoa

请注意,我假设您使用的是 webapi 2.2

这就是我要做的。首先,按照本教程在网络中创建个人帐户 api:

http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api

这将允许您的用户使用您的 api 注册并安全地存储凭据。然后,您可以在控制器或个别方法上使用 Authorize 属性(取决于您想要实现的目标)。

用户注册后,它可以通过传递用户名和密码从令牌端点请求访问令牌(在生产中确保您使用 https)。收到令牌后,您可以存储此客户端并将其与请求的 header 一起发送。

接下来是 CORS。完成上述操作后,您可以将服务器设置为允许来自任何来源的所有跨域,通过执行以下操作使用和动词:

使用 nuget 包管理控制台发出以下命令:

Install-Package Microsoft.Owin.Cors -Version 2.1.0

在您的启动 class(通常是 Startup.cs)中添加以下行:

 app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

如果您想更具选择性,您可以创建自己的自定义策略。

注意: 值得注意的是,如果请求不被视为简单,浏览器只会发出 pre-flight 请求(OPTIONS)。一个不简单的请求定义如下:

  • 它使用 GET、HEAD 或 POST 以外的方法。另外,如果使用 POST 发送带有 Content-Type 以外的请求数据 application/x-www-form-urlencoded、multipart/form-data 或 text/plain,例如如果 POST 请求向 服务器使用 application/xml 或 text/xml,则请求是 预检。

  • 在请求中设置自定义headers(例如请求使用header如X-PINGOTHER)

(有关详细信息,请参阅此处:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

应该是这样。

祝你好运。