c# - 使用 GET 访问 WCF 休息服务时出现 400 http 错误请求错误

标签 c# wpf wcf rest

the Exact error is System.Net.WebException: The Remote server returned an Error: (400) Bad Request. at system.Net.HttpWebRequest.GetResponse()我有一个托管在 IIS 中的 WCF 休息服务。我创建了一个简单的 WPF 应用程序,只有一个按钮。现在我需要使用 get 访问我的 WCF 服务中的方法。

这是WPF的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Net;
using System.Runtime.Serialization;
using System.Xml;
namespace RestFulDemo
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void RestDemo_Click(object sender, RoutedEventArgs e)
        {
            string msg="";
            HttpWebResponse resp=null;
            //WebRequest my = WebRequest.Create(@"http://www.google.com");
            //MessageBox.Show(my.ToString());
            WebRequest myRequest = WebRequest.Create(@"http://localhost/REST/RestServicesSample.svc/XmlData/sad");
            MessageBox.Show(myRequest.ToString());
            //Provides response from a URI.
            myRequest.Method = "GET";
            myRequest.ContentType = @"text/xml; charset=utf-8";
            try
            {
                 resp=myRequest.GetResponse() as HttpWebResponse;
            }
            catch (WebException c)
            {
                MessageBox.Show(c.ToString());
            }

            if (resp.StatusCode == HttpStatusCode.OK)
            {
                XmlDocument myXMLDocument = new XmlDocument();
                XmlReader myXMLReader = new XmlTextReader(resp.GetResponseStream());
                myXMLDocument.Load(myXMLReader);
                msg= myXMLDocument.InnerText;
            }
            MessageBox.Show(msg);
        }
    }
}

为什么我在 myRequest.GetResponse().. 中出错? 这是我的 .svc.cs 文件

using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Web;

namespace RestServices
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IRestServicesSample" in both code and config file together.
    [ServiceContract]
    public interface IRestServicesSample
    {
        [OperationContract]
        [WebGet]
        ////[WebInvoke(Method = "GET",
        ////    ResponseFormat = WebMessageFormat.Xml,
        ////    BodyStyle = WebMessageBodyStyle.Wrapped,
        ////    UriTemplate = "xml/{id}")]
       string XmlData(string id);
        //void DoWork();
        [OperationContract]
        [WebInvoke(Method = "GET",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "json/{id}")]
        string JsonData(string id);
    }
}

---这是web.config文件

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
      </webServices>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="RestServices.RestServiceSample" behaviorConfiguration="ServiceBehaviour">
        <endpoint behaviorConfiguration="WebBehavior" binding="webHttpBinding" contract="RestServices.IRestServiceSample">
        </endpoint>
      </service>`enter code here`
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehaviour">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="WebBehavior">
          <webHttp/>
        </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

最佳答案

服务配置请看:Can't connect to rest webservice through c# client

这是一个发出 GET 请求的示例 C# 客户端

string url = "localhost:8080/MyService.svc/Submit/" + "helloWorld";
string strResult = string.Empty;

HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url);
webrequest.Method = "GET";

// set content type based on what your service is expecting
webrequest.ContentType = "application/xml";

//Gets the response
WebResponse response = webrequest.GetResponse();

//Writes the Response
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream);
string s = sr.ReadToEnd();
return s;

关于c# - 使用 GET 访问 WCF 休息服务时出现 400 http 错误请求错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19975524/

相关文章:

c# - 在 WCF 服务中读取 XML 文件并从服务返回 XML

c# - 如何在 WCF 中识别经过身份验证的用户?

c# - 任何人都可以解决这个 Linq 错误吗?

c# - .NET 是否在新的不同线程池线程上恢复等待继续,还是重用先前恢复的线程?

wpf - "DataContext"命名空间中不存在属性 "http://schemas.microsoft.com/expression/blend/2008"

wpf - 通过代码设置带有WPF的超链接的值

c# - 在C#中,类或函数前方括号中写的是什么?

c# - 沿 3d 向量查找点

c# - 如何实现延迟位图加载?

c# - WPF:触发动画 - 沿 Y 轴向下移动控件