【问题标题】:Web Services in ASP.NETASP.NET 中的 Web 服务
【发布时间】:2015-04-09 12:53:28
【问题描述】:

谁能向我解释我将如何将这个场景作为一种 Web 服务方法(我给自己做这个练习是为了学习)。

物品清单及其价格; book0.50notepad1.20。然后是用户输入金额的一种方式,因此如果他们在文本框中输入 1,如果他们输入 2 并选择记事本,则金额为 2.40。

我需要两个 Web 方法吗?存放东西的最佳方式是什么?我已经尝试过了,但我得到了我没有重载方法的错误:

[WebMethod]
public ThingsPrices[] GetThings(string thing, decimal price)
{
    List<ThingsPrices> things = new List<ThingsPrices>();
    things.Add(new  ("book", 0.50);
    things.Add("notepad", 1.20); //No overload for method Add??
    return things.ToArray(); 
} 

【问题讨论】:

  • 你能提供ThingsPrices的代码吗?
  • 我们可以看看你对ThingsPrices的定义吗?您确实有语法问题,但如果没有定义,我们无法可靠地向您展示应该更正的内容。
  • 您收到有关构造函数的错误的原因是您尝试将 List.Add() 与字符串和数字一起使用。该方法只接受一个对象。你可能想要做的是这样的:things.Add(new ThingsPrices("notepad", 1.20));

标签: c# asp.net arrays web-services


【解决方案1】:

您可以为您的场景使用集合初始化器:

public class ThingsPrices
    {
        public string ItemName { get; set; }
        public double Price { get; set; }
    }

public ThingsPrices[] GetThings()
        {

            var things = new List<ThingsPrices>()
            {
                new ThingsPrices
                {
                    ItemName = "book",
                    Price = 0.5
                },
                new ThingsPrices
                {
                    ItemName = "notepad",
                    Price = 1.2
                }
            };

            return things.ToArray();
        }

在此处了解更多信息:https://msdn.microsoft.com/en-us/library/bb397680.aspx

总价计算如下:

public class Amount
    {
        public int Quantity { get; set; }
        public ThingsPrices ItemType { get; set; }        
    }    

    public static List<Amount> InputItems = new List<Amount>();

    public class AmmountCalculator
    {       
        public double GetTotalAmmount()
        {
            return InputItems.Sum(i => i.ItemType.Price*i.Quantity);
        }
    }

【讨论】:

  • 另外,以这种方式排列列表与我这样做的方式有什么区别(即使它有错误哈哈)?
  • 当您从一开始就知道集合中的项目时,集合初始化器非常适合使用。语法很清晰,优点是代码可读性更强。
  • 直到现在我才听说过集合初始化器!我现在就读一读!另外,我如何测试 Web 服务,以前,当我使用现有的 Web 服务输入框时,您可以在部署之前测试 Web 服务,有没有办法做到这一点?目前它显示调用按钮,然后显示 XML 但没有文本框
  • 如果您在本地计算机上运行服务,则应显示默认测试页面。但是如果你的方法没有任何参数,你可以简单地测试在浏览器中输入的方法:http://yourservice.asmx/GetThings
  • 当我在本地计算机上运行它时,我会使用 GetThings 方法获得 Web 服务页面并单击它,然后我只看到一个调用按钮,没有其他任何东西。我应该添加其他方法来显示测试文本框吗? (抱歉问题太多)
【解决方案2】:

您的代码中有几个不同的问题,所以我不太清楚您试图实现什么。首先让我们修复代码,然后我们可以解决剩下的问题。您的代码有一些错误。以下应该可以正常运行:

[WebMethod]
public IEnumerable<ThingsPrice> GetThings(string thing, decimal price)
{
    List<ThingsPrices> things = new List<ThingsPrices>();
    things.Add(new ThingsPrice {"book", 0.50});
    things.Add(new ThingsPrice {"notepad", 1.20}); 
    return things; 
} 

【讨论】:

  • 谢谢,我很兴奋,有很多想法。你能解释一下IEnumberable 是什么吗?另外,最好将价格存储为小数还是双精度?
  • 现在您没有将它存储在任何地方,您选择的类型取决于您的精度要求。你可以在这里阅读IEnumerablemsdn.microsoft.com/en-us/library/9eekhta0(v=vs.110).aspx。 TL;DR 是它是围绕您的收藏的抽象,因此您可以将具体的物化留给消费者。可以根据需要将 IEnumerable 转换为 List 或 Array
  • 嗨,克里斯,你能告诉我为什么 Web 服务不显示文本框来测试方法吗?
  • 有很多插件和工具可以让你测试 web 服务。我建议你从 Fiddler 开始,然后从那里开始。它是免费下载的,非常值得投入时间,因为它是一个方便的工具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2016-02-24
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多