验证对外部 REST 服务的请求

Authenticating requests to external REST service

我是网络开发的新手,对网络的主要概念不太了解。但是,我的任务是编写一个 asp.net 应用程序,用户可以在其中通过查询外部 RESTful Web 服务来搜索文档。对此 REST 服务的请求必须通过 HTTP 基本身份验证进行身份验证。

到目前为止一切顺利,我已经能够使用 HttpWebRequestHttpWebResponse 查询服务,将编码的 user:pass 添加到请求的授权 header,反序列化 Json 响应并生成包含 url 的字符串列表到搜索结果的 pdf 文档。

所以现在我使用这些 url 以编程方式将 HyperLink 元素添加到页面:

foreach (string url in urls) {

    HyperLink link = new HyperLink();
    link.Text = url;
    link.NavigateUrl = url;
    Page.Controls.Add(link);

}

问题是对这些文档的请求必须使用与查询 REST 服务时相同的基本 http 身份验证和相同的 user:pass 进行授权,因为我只是在创建 link s 供用户单击,而不创建任何 HttpWebRequest objects,我不知道如何验证用户单击 link.

产生的此类请求

非常感谢任何关于如何完成此操作的指示。提前致谢!

您可能想在服务器端执行请求,正如我认为您已经在做的那样,然后将结果显示在您自己的页面中,或者直接将结果流式传输回用户。

有点不清楚你需要什么(link 是什么,你向用户展示了什么,等等),所以这是我根据你提供的信息所能做的最好的建议给。

更新: 我会创建一个 HttpHandler(ASP.NET 项目中的一个 .ashx 文件),并向其 link 添加参数,以便您可以向 REST 服务发出请求并获取正确的文件,然后流式传输数据直接返回给访问者。这是一个简单的例子:

public class DocumentHandler : IHttpHandler {

    public Boolean IsReusable {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context) {
        // TODO: Get URL of the document somehow for the REST request
        // context.Request
        // TODO: Make request to REST service

        // Some pseudo-code for you:
        context.Response.ContentType = "application/pdf";

        Byte[] buffer = new WebClient().DownloadData(url);
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);

        context.Response.End();
    }
}

希望大家自己填空