2011-09-01 55 views
6

我正在使用WCF Restservice来验证用户。我有一个POST方法,使用jquery可以正常工作,但在Fiddler测试中失败。我得到415不支持的媒体类型。WCF Rest服务POST方法在Fiddler失败

这里是我的代码

[OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "Login", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    public string Login(string userName, string password) 
    { 
     string valid; 

     // Log in user 
     int authenticatedId = AuthenticateManager.Authenticate(userName, password); 
     if (authenticatedId != -1) 
     { 
      valid = "Welcome " + userName + "!"; 
     } 
     else 
     { 
      valid = "Login failed!"; 
     } 

     return valid; 
    } 

这是我的身体小提琴手通过什么

[{ "userName":"dusshyi", 
    "password":"subram1" }] 

这是小提琴手产生

<HTML><HEAD><STYLE type="text/css">#content{ FONT-SIZE: 0.7em; PADDING-BOTTOM: 2em; MARGIN-LEFT: 30px}BODY{MARGIN-TOP: 0px; MARGIN-LEFT: 0px; COLOR: #000000; FONT-FAMILY: Verdana; BACKGROUND-COLOR: white}P{MARGIN-TOP: 0px; MARGIN-BOTTOM: 12px; COLOR: #000000; FONT-FAMILY: Verdana}PRE{BORDER-RIGHT: #f0f0e0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f0f0e0 1px solid; MARGIN-TOP: -5px; PADDING-LEFT: 5px; FONT-SIZE: 1.2em; PADDING-BOTTOM: 5px; BORDER-LEFT: #f0f0e0 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #f0f0e0 1px solid; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e5e5cc}.heading1{MARGIN-TOP: 0px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: 26px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; MARGIN-LEFT: -30px; WIDTH: 100%; COLOR: #ffffff; PADDING-TOP: 10px; FONT-FAMILY: Tahoma; BACKGROUND-COLOR: #003366}.intro{MARGIN-LEFT: -15px}</STYLE> 
<TITLE>Service</TITLE></HEAD><BODY> 
<DIV id="content"> 
<P class="heading1">Service</P> 
<BR/> 
<P class="intro">Endpoint not found.</P> 
</DIV> 
</BODY></HTML> 

请帮忙!

+0

您可以发布完整的请求小提琴手正在生成并充分反应? – scmccart

+0

我更新了我的问题 – Hardcode

回答

13

您是否在Fiddler的Request body editor中将请求的内容类型设置为application/json

enter image description here

+0

我收到404 Not Found错误! – Hardcode

+1

我会将此标记为答案!我只是从网址中删除正斜杠并开始工作。防爆。 http://www.example.com/Login – Hardcode

+0

我做到了,它仍然没有为我工作 – PositiveGuy

3

我今天早上...

什么固定对我来说是点击“作曲”选项卡,然后添加以下的“请求头”部分有同样的问题:

Content-Type: application/x-www-form-urlencoded 

没有这一行,我注意到,该日志表明,它试图打电话给我REST服务以“text/html的”的内容类型,以及服务将不会被调用。

如果我增加了行这甚至发生:

Content-Type: application/json 

然而,增加的行之后 “内容类型:应用程序/ x-WWW的形式,进行了urlencoded”,提琴手现在会使用内容类型“application/json”调用服务,并且Web服务被正确调用。奇怪...

我创建创建一个JSON WCF Web服务,并与小提琴手测试它,下页的完整walkthough:

http://mikesknowledgebase.com/pages/Services/WebServices-Page1.htm

+0

这也解决了我的问题。没有这个,我在我的控制器中得到了null作为参数。 –

+0

我回来了,现在我得到一个默认(MyDataType)作为参数,而不是null。 –

1

提琴手Web调试:作曲家部分;设置

Parsed 
POST,../Service.svc/Login,HTTP/1.1 

Request Header: 
User-Agent: Fiddler 
Content-Type: application/json;charset=UTF-8 
Host: localhost:15021 
Content-Length: 43 

Request Body: 
{"username":"ABC","password":"pwd"} 

,然后执行