Javascript 对控制器的Web API调用不起作用,断点未命中,以前版本的代码不再起作用(用应答更新)

Javascript 对控制器的Web API调用不起作用,断点未命中,以前版本的代码不再起作用(用应答更新),javascript,jquery,asp.net-mvc,asp.net-web-api,Javascript,Jquery,Asp.net Mvc,Asp.net Web Api,当用户将鼠标悬停在文档上时,我的intranet ASP.NET MVC网站中的视图使用Web API呈现图像缩略图(通常,会出现一个看起来像文档第一页的图形)。我被卡住了,因为这个代码以前是有效的;我不确定是否有第三方修改了外部代码(或者我的代码不好)破坏了它,但现在我看不到图像缩略图 我很难确定发生了什么事。以下是我迄今为止所做的工作: 直接修改代码 这是我通常做的第一件事:假设错误是由于某种错误(或我忘记做的事情)造成的。我关注的问题区域是这个JavaScript/jQuery代码片段,就

当用户将鼠标悬停在文档上时,我的intranet ASP.NET MVC网站中的视图使用Web API呈现图像缩略图(通常,会出现一个看起来像文档第一页的图形)。我被卡住了,因为这个代码以前是有效的;我不确定是否有第三方修改了外部代码(或者我的代码不好)破坏了它,但现在我看不到图像缩略图

我很难确定发生了什么事。以下是我迄今为止所做的工作:

  • 直接修改代码
  • 这是我通常做的第一件事:假设错误是由于某种错误(或我忘记做的事情)造成的。我关注的问题区域是这个JavaScript/jQuery代码片段,就在视图的
    代码区域内:

        $(".tile2").each(function () {
            $(this).tooltip({ content: "<img src='/jportal/api/portalDocument/thumbnail?u=" + this.id + "' />" });
    });
    
    我继续在这个API控制器调用上抛出断点,看看是否可以命中它们,但什么也没发生。这就好像从未使用过该操作,即使每个文档都呈现了一个实际的图形(它是一个通用的X图形,如“未找到图像”)

    模型

    我尝试在几个模型文件上抛出断点,我认为这些文件是由API控制器调用的,但是这些断点也没有被命中。(我可以在这里添加代码,但由于调用没有遍历任何一个模型,因此可能不值得这样做。)

  • 恢复以前的工作版本代码以进行测试(并观察它们也失败)
  • 这就是它变得很奇怪的地方。我还原了过去的一两个代码副本(只是为了看看旧代码是否有效,我确实弄糟了一些东西)。以前的副本也无法显示缩略图


    更新:简单的修复可以节省时间!(字幕:调试时观看)

    感谢那些早些时候回复的人。正如在下面的早期回复中所讨论的,修复是通过使用浏览器开发工具和密切关注我的URL来实现的。以下是我所做的:

  • 我不得不修改呈现每个“工具提示”的javascript代码。
  • 值设置为
    /jportal/api/portalDocument/thumbnail?u=
    。这确实是一个糟糕的URL;也就是说,完整标记的内容如下

    当URL需要更接近

    我昨天在调试时偶然发现了这个问题,但直到今天早上才将2和2放在一起。我曾尝试将正确的URL前缀插入
    })生成一个img标记

    它失败了。(你看到了额外的单引号,对吗?那似乎把它搞糟了。)

    当我将URL前缀分离为它自己的变量时,它起了作用:

    public HttpResponseMessage GetThumbNailImage(string u)
        {
            string url = new Hex(u);
            HttpResponseMessage response = new HttpResponseMessage();
            using (var webclient = new System.Net.WebClient() { Credentials = SharePointCredential.Credential })
            {
                var data = webclient.DownloadData(url);
                using (var ms = new System.IO.MemoryStream(data))
                {
                    using (Bitmap img = new Bitmap(ms))
                    {
                        using (Bitmap b = new Bitmap(img, new Size(img.Width / 3, img.Height / 3)))
                        {
                            using (Graphics gr = Graphics.FromImage(b))
                            {
                                using (var ia = new ImageAttributes())
                                {
                                    ia.SetColorMatrix(new ColorMatrix(DocumentViewer.gray_matrix));
                                    ia.SetThreshold(0.8f, ColorAdjustType.Default);
                                    gr.DrawImage(b, new Rectangle(0, 0, b.Width, b.Height), 0, 0, b.Width, b.Height, GraphicsUnit.Pixel, ia);
                                    using (System.IO.MemoryStream mms = new System.IO.MemoryStream())
                                    {
                                        b.Save(mms, System.Drawing.Imaging.ImageFormat.Png);
                                        response.Content = new ByteArrayContent(mms.ToArray());
                                        response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png");
                                        return response;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    
    var-imageURLPrefix='@Model.documentContext'//整个http://website.com/jportal/api/portalDocument/thumbnail?u= 处理
    $(this.tooltip({content::})//稍微干净一点,效果很好:)
    

    呸!我学到了一些关于网站调试API操作的新知识:我必须查看我的典型解决方案路径——我被抛到一边,因为我在API操作和模型文件上设置的断点没有被击中;在我查看了被破坏的代码(通过查看页面源代码)之后,我得到了我所需要的。(直到今天我才正确地应用它。)

    我将通过以下路径来定位问题的位置:

  • 启动fiddler或浏览器开发工具(F12)并检查网络活动-您的页面是否实际调用此Web API操作?(即从预期URL获取图像)
  • 假设有,URL是否包含正确的参数
  • 如果上面所有的都正常-假设您的服务器就是问题所在。否则,它肯定是客户端应用程序(浏览器/应用程序javascript代码等),也可能是服务器
  • 要测试服务器-只需导航到图像的URL,您知道该URL应使用标准浏览器URL栏工作-如果图像加载,则服务器运行正常

    要测试客户端应用程序,请开始用已知有效的缩略图的静态URL替换标记等代码部分。(可能只是从服务器上的静态资源加载的图像,而不是Web API调用)

    当您确定它位于浏览器端时,您可以:

    • 使用开发人员工具调试代码以查看出现了什么问题
    • 检查源代码管理,查看自上一个有效版本以来的任何更改
    • 测试其他浏览器(!)可能您的浏览器供应商更改了您的某些内容。例如,你做了一些有点不合标准的事情,并且严格遵守了这个标准

    最后,在这些测试之后提供更多信息,以便我们提供更多帮助。

    您是否可以查看缩略图试图从哪个URL加载,并将其输入浏览器并查看响应。或者使用浏览器中的开发人员工具查看图像请求的响应。我假设路由在某个地方被破坏了——你可能会在回复中看到一个描述性错误。谢谢你的回复,雅各布。在视图呈现后,我通过查看页面源抓取了正在发布的URL。看起来URL不正确或已被修改。经过一点实验,我找到了URL缺少的部分,然后将其添加到javascript中(因此,我将其改为
    ),预览再次出现。(imageURLPrefix是我在javascript的该部分中创建的一个变量,用于捕获正确的URL前缀值,而不是
    /jportal/api/portalDocument/缩略图?u=
    。当我试图直接将模型值放入时,它总是失败-不能将
    '@model.documentContext'
    直接放入
    标记中-单引号。)将标签弄乱,缩略图无法正确呈现。)谢谢你,Yoad,问题解决了。我启动了浏览器开发工具并查看了netw
    var imageURLPrefix = '@Model.documentContext'; //that whole http://website.com/jportal/api/portalDocument/thumbnail?u= deal
        $(this).tooltip({ content: "<img src='" + imageURLPrefix + this.id + "' />" }); //a little cleaner, AND it works :)