【问题标题】:Web .NET service throwing 404 codeWeb .NET 服务抛出 404 代码
【发布时间】:2016-12-18 03:27:18
【问题描述】:

我有一个正在调试的工作代码,但是在对该方法进行了一些重构之后,我的单元测试返回了 404,并且可以找出原因。

POST 方法的代码

public class HomeController : ApiController
{
    [HttpPost]
    public string ReturnXmlDocument(HttpRequestMessage request)
    {
        try
        {
            XDocument doc = XDocument.Load(request.Content.ReadAsStreamAsync().Result);
            Stream s = new MemoryStream();

            doc.Save(s);
            s.Seek(0, SeekOrigin.Begin);
            XmlSerializer mySerializer = new XmlSerializer(typeof(PictureModelList));
            using (XmlReader newReader = XmlReader.Create(s))
            {
                PictureModelList obj = (PictureModelList)mySerializer.Deserialize(newReader);
                string path = @"C:\testfolderforservice\";

                foreach (var item in obj.PictureList)
                {
                    File.WriteAllBytes(string.Format("{0}{1}", path, item.FileName), item.Data);
                }
            }

        }
        catch (Exception ex)
        {

            ;
        }

        return "Success";
    }

}

来自单元测试的代码

    [TestMethod]
    public void TestMethod1()
    {
        List<PictureModel> lPM = new List<PictureModel>();
        var files = Directory.GetFiles(@"C:\source", "*.jpg");

        foreach (var file in files)
        {
            PictureModel pm = new PictureModel();
            pm.FileName = Path.GetFileName(file);
            pm.Data = File.ReadAllBytes(file);
            lPM.Add(pm);
        }

        PictureModelList pmL = new PictureModelList();
        pmL.PictureList = lPM;

        XmlSerializer serializer = new XmlSerializer(pmL.GetType());

        StringWriter sq = new StringWriter();
        serializer.Serialize(sq, pmL);

        sq.Close();

        string xmlData = sq.ToString();

        var content = new StringContent(xmlData, Encoding.Unicode, "text/xml");

        var client = new HttpClient();

        var result = client.PostAsync("http://localhost/api/Home/ReturnXmlDocument", content).Result;
    }

就像我之前说的,只是在 POST 方法内部进行了一些重构并执行了单元测试,PostAsync 方法返回了 404 代码。

我可以通过附加到进程来调试 POST 方法,或者我做错了一切。

【问题讨论】:

    标签: c# visual-studio unit-testing model-view-controller


    【解决方案1】:

    我会从摆脱空渔获物开始。按照您的方式,即使出现异常,也会返回“成功”。空的 catch 块从来都不是一个好主意。

    ReadAsStringAsync 也是有问题的,因为您没有等待它,当您阅读它时,响应中可能还没有值。

    您如何确定测试失败?我在结果中没有看到任何断言。

    是否有任何 ExceptionFilters 生效?

    也许发布之前工作的“之前”重构代码可能会提供额外的线索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多