我是从JavaScript背景到.net web api的,我正在尝试创建代理来帮助解决跨域JSON请求。我是从服务器上获取的,我不能控制源代码,因此我无法直接配置CORS。同样,它也不会说JSONP。
当我试图了解Web API时,有两个问题:
1)Httpclient是否适合这项工作? (如果不是,那是什么?)
2)如果httpclient是正确的工具,什么是绝对的裸机httpclient配置,所以我可以测试这个?不担心抛出异常或其他任何东西,只需获取API数据并将其提供给jQuery客户端。
我猜另一条很好的信息就是在http请求中构建用户名/密码验证。
任何帮助都非常感谢,任何好的博客/教程/等的链接都可能有助于作为这类事情的介绍。我今天独自观看了几个,而且我仍然无法在服务器端获得基本的http请求,而无需剪切/粘贴其他人的代码。
提前致谢!
**编辑 - 为了使这个问题更加明确,我试图测试的是1)代理可以连接到第三方服务器,这涉及通过用户名和密码进行身份验证2)可以然后,代理使用从第三方服务器收到的JSON数据响应jQuery客户端请求。
感谢所有花时间回应的人。
答案 0 :(得分:1)
HttpClient似乎可以胜任这项工作。
关于最小配置 - 取决于第三方期望的内容。在大多数情况下,开箱即用,但总会有一些小调整,如标题和/或授权代码。
我刚刚找到一些博客文章,其中一些作者展示了如何测试这样的代理并显示代理代码。请参阅:http://www.davidbreyer.com/programming/2014/10/11/create-fake-responses-to-rest-service-calls-in-c/
您可以在此处找到有关发送凭据的信息:How to use credentials in HttpClient in c#?
HTH
编辑:
此示例代码应该有效(从上面的博客复制并修改):
public class Proxy
{
public async Task<ExampleDto> GetExample(int id)
{
var client=new HttpClient();
//set some auth here
//set other headers
var response = client.GetAsync(
string.Format("/api/restserviceexample/{0}", id))
.Result.Content.ReadAsAsync<ExampleDto>();
return await response;
}
}
它非常简单,您只需运行它,看看其他服务器是否响应。如果没有,您可以使用标题 - 因为所有会话信息和用户身份信息都是使用ookies和/或标题发送的,您所要做的就是查看它是如何使用常规浏览器制作的,然后伪造它服务器。 Fiddler可能是这项工作的最佳工具。
然而 - 有一件事需要考虑。如果其他服务具有特殊的授权方法(除了为每个请求传递凭据),整个过程变得棘手,因为您的代理应该使用他们的服务执行授权,然后将他们的auth cookie存储在服务器上或将它们传播到浏览器并附加他们提出了所有下一个要求。
答案 1 :(得分:0)
首先,如果你真的想要最小化,你不需要使用带有C#的ASP.NET。 没有ASP,.NET有很好的http处理能力。查看HttpListener,HttpListenerContext,HttpListenerRequest等类...是的,您必须编写一些样板作为您的应用程序,但这些类非常好。 见其他:
http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=599978
其次,如果你想要用户&amp;密码,我使用oauth身份验证结帐,因此您不必直接处理它们。 Google Plus,Windows Live,Facebook等...都有类似的OAuth 2.0 API。见其他:
http://msdn.microsoft.com/en-us/library/dn659750.aspx
https://developers.google.com/+/web/signin/server-side-flow
https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/v2.2