gpt4 book ai didi

wcf - 如何使 WCF webHttp 行为接受 HEAD 动词?

转载 作者:可可西里 更新时间:2023-11-01 16:10:44 24 4
gpt4 key购买 nike

我在 Windows 服务中托管了一个 WCF 服务。我已经向它添加了一个具有 webHttp 行为的 webHttpBinding,每当我向它发送 GET 请求时,我都会得到 http 200,这正是我想要的,问题是每当我向它发送 HEAD 请求时,我都会得到一个 http 405。

有没有办法让它也为 HEAD 返回 http 200?这可能吗?

编辑:这是操作契约(Contract):

    [OperationContract]
[WebGet(UriTemplate = "MyUri")]
Stream MyContract();

最佳答案

[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate="/data")]
string GetData();
}

public class Service : IService
{
#region IService Members

public string GetData()
{
return "Hello";

}

#endregion
}

public class Program
{
static void Main(string[] args)
{
WebHttpBinding binding = new WebHttpBinding();
WebServiceHost host = new WebServiceHost(typeof(Service), new Uri("http://localhost:9876/MyService"));
host.AddServiceEndpoint(typeof(IService), binding, "http://localhost:9876/MyService");
host.Open();
Console.Read();

}
}

上面的代码工作正常。我根据 HEAD 请求收到 405(方法不允许)。我使用的程序集版本是 System.ServiceModel.Web,Version=3.5.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35。

实际上,据我所知,没有直接的方法允许它。但是你可以尝试类似下面的解决方案。但是对于需要 GET 和 HEAD 的每个方法都必须这样做,这使得它不是如此优雅的解决方案..

[ServiceContract]
public interface IService
{
[OperationContract]

[WebInvoke(Method = "*", UriTemplate = "/data")]
string GetData();
}

公共(public)类服务:IService { #region IService 成员(member)

    public string GetData()
{
HttpRequestMessageProperty request =
System.ServiceModel.OperationContext.Current.IncomingMessageProperties["httpRequest"] as HttpRequestMessageProperty;

if (request != null)
{
if (request.Method != "GET" || request.Method != "HEAD")
{
//Return a 405 here.
}
}

return "Hello";

}

#endregion
}

关于wcf - 如何使 WCF webHttp 行为接受 HEAD 动词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387932/

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