【问题标题】:Web API with web services带有 Web 服务的 Web API
【发布时间】:2014-11-10 14:35:31
【问题描述】:

我编写了以下代码来调用 Web 服务数据输出并且它有效。问题是当我在 Web 软件上激​​活 api 密钥并生成此密钥时,调用 Web 服务并需要创建一个 api 客户端通过 httpRequest 请求这个,但是每当我运行它时我的问题是“远程服务器返回错误:(404)未找到。”你有什么主意吗?我将整个代码粘贴在下面。

非常感谢您

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;



namespace DisplayDataInformation
{
    public partial class DisplayDataInformation : Form
    {
        public DisplayDataInformation()
        {
            InitializeComponent();
        }

        private void Submit(object sender, EventArgs e)
        {
            localhost.Dashboard proxy = new localhost.Dashboard();
            localhost.ProjectMetaData[] pm = proxy.GetAllProjectMetaData();
            const string URL = "http://localhost/myProgram/";
            const string apiKey = "d26b15b5-e336-48de-9142-939c0e639e8f";
            const string Id = "Id";
            const string Pass = "pass";


            System.Net.HttpWebRequest myHttpWReq;
            System.Net.HttpWebResponse myHttpWResp;

            //myHttpWReq.ContentLength = 0;

            // Make a web request to the web service
            myHttpWReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(BLUEURL + "http://localhost/myProgram/Dashboard.asmx" + Id + Pass + apiKey);
            myHttpWReq.Method = "Get";

            // Get the response of the web service
            myHttpWResp = (System.Net.HttpWebResponse)myHttpWReq.GetResponse();

            if (myHttpWResp.StatusCode == System.Net.HttpStatusCode.OK)
            {
                //Create an XML reader to parse the response
                System.Xml.XmlReader reader = System.Xml.XmlReader.Create(myHttpWResp.GetResponseStream());

            }

            //set an string output to the windows form
            StringBuilder sb = new StringBuilder();

            foreach (localhost.ProjectMetaData value in pm)
            {
                sb.AppendLine(value.ProjectTitle + "    -    "
                    + value.ProjectID + "    -    "
                    + value.PublishStatus );
               // sb.AppendLine("\r\n\t");
            }

            label1.Text = sb.ToString(); 

        }

    }
}

【问题讨论】:

    标签: c# web-services http client api-key


    【解决方案1】:

    看起来您最喜欢错误地生成请求 URL。您已经创建了这样的:

    myHttpWReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(BLUEURL + "http://localhost/myProgram/Dashboard.asmx" + Id + Pass + apiKey);
    

    此代码生成的 URL 将是:

     http://localhost/myProgram/Dashboard.asmxIdPassd26b15b5-e336-48de-9142-939c0e639e8f
    

    (注意:我在您的代码示例中找不到变量 BLUEURL 的值,但无论它是什么,它都会为您生成的 URL 加上前缀。我最好的猜测是它是空白的,否则您会得到一个UriFormatException.)

    这看起来不像您所追求的正确 URL,因此出现 404 错误。你可能追求的是:

    myHttpWReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(String.Format("http://localhost/myProgram/Dashboard.asmx?id={0}&pass={1}&apiKey={2}", Id, Pass, apiKey));
    

    这会将请求发送到 URL

    http://localhost/myProgram/Dashboard.asmx
    

    在查询字符串中发送您的参数。

    但是这可能仍然会给您一个错误,因为您正在尝试调用 asmx Web 服务,它是一个基于 XML 的 Web 服务,因此您的请求格式错误。

    This tutorial 将向您展示如何将 Dashboard.asmx Web 服务作为服务引用添加到您的项目中。这将自动生成一个代理类,它将为您将所有对 Web 服务的调用包装成简单的函数调用。

    已阅读以下答案以获得有关如何添加参考的更多帮助:

    【讨论】:

    • 您好,感谢您的回答。我做了你给我的改变,但现在它给了我另一个错误远程服务器返回一个错误:(500)内部服务器错误。
    • 再次嗨!,我终于可以通过这样做 myHttpWReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(String.Format("localhost/BlueWebService55/Dashboard.asmx?id={0} &pass={1}&apiKey={2}", BlueId, BluePass, apiKey) + GetAllProjectMetaData);我创建了一个名为 string GetAllProjectMetaData = ""; 但问题是当我调用 Web 服务时没有显示任何内容,它表明我的客户端没有使用该方法。在 Web 应用程序中,有一个调用 GetAllProjectMetaData 的选项方法,但从我的应用程序中它不这样做
    • 我已经更新了我的答案,包括一些关于调用 asmx Web 服务的最佳方式的说明。如果您仍然卡住,可能值得您对 asmx Web 服务进行一些研究。
    • 您好,再次感谢您的回答。根据教程,这就是如何添加一个已经完成的网络参考。我能够毫无问题地使用网络服务。当我在有问题的 Web 服务中启用 api 密钥时,问题开始发生,因此当我的客户端在没有 api 密钥的情况下工作时,这将启用安全性并调用和使用 Web 服务不会以相同的方式工作,它仅使用代理和 foreach 循环 ao 我正在显示所有内容。谢谢
    • 我不确定我是否关注您的问题。在我看来,您有一个可以使用代理生成的类成功调用的 Web 服务。您是否尝试通过使其需要 API 密钥来在 Web 服务上实现安全机制?还是这种安全机制已经存在?无论哪种方式,听起来这个问题都偏离了我相信我已经回答的原始问题的主题。
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多