c# – body参数’width’. GET *** 作不能拥有一个机构?

c# – body参数’width’. GET *** 作不能拥有一个机构?,第1张

概述我试图从wcf休息服务获取图像,如下所示: [ServiceContract]public interface IReceiveData{ [OperationContract] [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.X 我试图从wcf休息服务获取图像,如下所示:
[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.com:8000/Service/picture?wIDth=时使用UriTemplate =“picture?w = {wIDth}& h = {height}”作为我的UriTemplate 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,(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",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 *** 作不能拥有一个机构?全部内容,希望文章能够帮你解决c# – body参数’width’. GET *** 作不能拥有一个机构?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240840.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存