gpt4 book ai didi

c# - WCF WebInvoke POST - 方法不允许错误

转载 作者:太空狗 更新时间:2023-10-29 21:58:50 24 4
gpt4 key购买 nike

我有一个 OperationContract 方法,我试图在其中查询数据并将数据插入数据库。我正在使用 POST 方法并从浏览器中的 javascript 调用该服务。 WCF 服务在同一域中,因此我不必使用 JSONP。我也在修改数据,所以它应该是 POST 请求而不是 GET 请求。但是我仍然收到“方法不允许的错误”。有人遇到过这种情况吗?

我的服务正在调用

http://some_url.com/services/ProfileService.svc/json/CurrentUser

奇怪的是,即使我指定了 POST,当我访问此 url 时,它似乎是通过 GET 请求调用的。但是,在页面加载时,它似乎正在尝试 POST 请求。

访问 url 时浏览器响应:

Request URL:http://some_url.com/services/ProfileService.svc/json/CurrentUser
Request Method:GET
Status Code:405 Method Not Allowed
Request Headersview parsed
GET /services/ProfileService.svc/json/CurrentUser HTTP/1.1

这是我尝试调用的方法:

[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json)]

public HIPUser GetCurrentUser()
{
string[] domainUser;
string Auth_User = HttpContext.Current.User.Identity.Name.ToString().ToLower();
domainUser = Auth_User.Split('\\');
string user = domainUser[1];
Debug.WriteLine(user);

ProfileManager pm = new ProfileManager();
var results = pm.GetUserByUserName(user);

if (results.Length > 0)
{
return results.First();
}
else
{
Debug.WriteLine("IS NULL");
var x = pm.CreateUser(user, null, null);
Debug.WriteLine(x.UserName);
return x;
}
}

客户:

function getCurrentUser() {

$.ajax({
type: "POST",
url: "services/ProfileService.svc/json/GetCurrentUser",
contentType: "application/json; charset=utf-8",
data: null,
dataType: "json",
error: function (request, error, u) {
alert('blargherror: ' + error);
},
success: function (result, status) {
alert(result.d);
}
});
}

不确定是否需要但是Web.Config:

<behaviors>
<endpointBehaviors>
<behavior name="jsonBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>

<serviceBehaviors>
<behavior name="metaBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>

<serviceHostingEnvironment
aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />

<services>
<service name="ProfileService" behaviorConfiguration="metaBehavior">
<endpoint address="/json"
behaviorConfiguration="jsonBehavior"
binding="webHttpBinding"
bindingConfiguration="secure"
contract="ProfileService" />
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="secure"
contract="ProfileService" />
</service>
</services>

编辑到 Web.Config - 添加绑定(bind)

<bindings>
<webHttpBinding>
<binding name="secure">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</webHttpBinding>
<basicHttpBinding>
<binding name="secure">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>

最佳答案

我能够弄清楚这一点。返回对象是未知类型存在问题,因此无法将其序列化为 JSON 对象。不确定如何序列化对象以使其与我的方法一起工作,所以我最终只是更改方法以返回一个字符串来构造我自己的自定义 JSON 字符串,并使用 eval() 函数将其转换为 JSON 对象。

关于c# - WCF WebInvoke POST - 方法不允许错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11419627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com