对外部 REST 服务的请求进行身份验证

本文关键字:身份验证 请求 REST 服务 对外部 | 更新日期: 2023-09-27 18:36:08

我对Web开发真的很陌生,我对Web的主要概念并没有很好的掌握。但是,我的任务是编写一个 asp.net 应用程序,用户可以在其中通过查询外部 RESTful Web 服务来搜索文档。对此 REST 服务的请求必须通过 HTTP 基本身份验证进行身份验证。

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

所以现在我以编程方式将HyperLink元素添加到具有以下 url 的页面中:

foreach (string url in urls) {
    HyperLink link = new HyperLink();
    link.Text = url;
    link.NavigateUrl = url;
    Page.Controls.Add(link);
}

问题是对这些文档的请求必须使用与查询 REST 服务时相同的基本 http 身份验证和相同的 user:pass 进行授权,并且由于我只是创建链接供用户单击,而不是创建任何HttpWebRequest对象,我不知道如何验证用户单击链接产生的此类请求。

非常感谢

我如何实现这一目标的任何指示。提前感谢!

对外部 REST 服务的请求进行身份验证

您可能希望像您已经在做的那样在服务器端执行请求,然后显示嵌入在您自己的页面中的结果,或者只是将结果直接流式传输回用户。

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

更新:我会创建一个 HttpHandler(ASP.NET 项目中的 .ashx 文件),并链接到它,带有参数,以便您可以向 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();
    }
}

我希望你能自己填空。