Javascript 对控制器的Web API调用不起作用,断点未命中,以前版本的代码不再起作用(用应答更新)
当用户将鼠标悬停在文档上时,我的intranet ASP.NET MVC网站中的视图使用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代码片段,就
代码区域内:
$(".tile2").each(function () {
$(this).tooltip({ content: "<img src='/jportal/api/portalDocument/thumbnail?u=" + this.id + "' />" });
});
我继续在这个API控制器调用上抛出断点,看看是否可以命中它们,但什么也没发生。这就好像从未使用过该操作,即使每个文档都呈现了一个实际的图形(它是一个通用的X图形,如“未找到图像”)
模型
我尝试在几个模型文件上抛出断点,我认为这些文件是由API控制器调用的,但是这些断点也没有被命中。(我可以在这里添加代码,但由于调用没有遍历任何一个模型,因此可能不值得这样做。)
更新:简单的修复可以节省时间!(字幕:调试时观看) 感谢那些早些时候回复的人。正如在下面的早期回复中所讨论的,修复是通过使用浏览器开发工具和密切关注我的URL来实现的。以下是我所做的:
值设置为/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 :)