gpt4 book ai didi

c# - body 参数 'width' 。 GET 操作不能有主体?

转载 作者:太空狗 更新时间:2023-10-29 20:47:41 25 4
gpt4 key购买 nike

我正在尝试从 wcf rest 服务获取图像,如下所示:

[ServiceContract]
public interface IReceiveData
{
[OperationContract]
[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "picture/")]
//this line is wrong though
Stream GetImage(int width, int height);
}
public class RawDataService : IReceiveData
{
public Stream GetImage(int width, int height)
{
// Although this method returns a jpeg, it can be
// modified to return any data you want within the stream
Bitmap bitmap = new Bitmap(width, height);
for (int i = 0; i < bitmap.Width; i++)
{
for (int j = 0; j < bitmap.Height; j++)
{
bitmap.SetPixel(i, j, (Math.Abs(i - j) < 2) ? Color.Blue : Color.Yellow);
}
}
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
ms.Position = 0;
WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
return ms;
}
}

在我的主机应用程序中:

class Program
{
static void Main(string[] args)
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(RawDataService), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(IReceiveData), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior());
host.Open(); // this line
Console.WriteLine("Host opened");
Console.ReadLine();

我收到这个错误:

Operation 'GetImage' in contract 'IReceiveData' uses GET, but also has body parameter 'width'. GET operations cannot have a body. Either make the parameter 'width' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.

我不确定您如何为图像设置 webinvoke/UriTemplate 方法或如何获取图像并返回它。有人可以发布在此示例中显示图像的正确方法吗?

编辑

如果我尝试以下答案并在导航到 http://www.localhost 时使用 UriTemplate = "picture?w={width}&h={height}" 作为我的 UriTemplate .com:8000/Service/picture?width=50&height=40 我收到代码错误:

public Stream GetImage(int width, int height)
{
Bitmap bitmap = new Bitmap(width, height); // this line
for (int i = 0; i < bitmap.Width; i++)
{
for (int j = 0; j < bitmap.Height; j++)
{
bitmap.SetPixel(i, j, (Math.Abs(i - j) < 2) ? Color.Blue : Color.Yellow);
}
}
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
ms.Position = 0;
WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
return ms;
}

哪些状态 ArguementException 未被用户代码处理:参数无效。

最佳答案

在属性中,您需要告诉运行时您希望将宽度和高度作为 URL 参数。

目前,运行时假定您正在调用不带参数的 URL,但被调用的方法需要参数,因此运行时真的不知道如何找到要传递给 方法的值宽度高度

这看起来像

[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "picture/{width}/{height}")]
Stream GetImage(string width, string height)
{
int w, h;
if (!Int32.TryParse(width, out w))
{
// Handle error: use default values
w = 640;
}
if (!Int32.TryParse(height, out h))
{
// Handle error use default values
h = 480;
}

....
}

并且您需要像 http://test.tld/picture/320/200 这样调用 URL。

关于c# - body 参数 'width' 。 GET 操作不能有主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10012737/

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