0

我有一台带有 SQL Server 2012 Express 数据库的服务器。我已通过身份验证连接到它,并将它用作 ASP.NET MVC 4 应用程序的后端。

有了这个应用程序,我还开发了一个 API。在我自己的应用程序中使用 jQuery 以编程方式调用 API 工作正常。查询数据库以获取信息也可以。

但是,当我从 VS2010 运行应用程序并尝试使用可访问数据库的 URL 访问 API 时,我收到 HTTP 500 错误。

只是为了确保这个问题不在我的应用程序端,然后我修改了 API 资源,以便它获取一个本地数组(而不是来自数据库的信息),当我点击相同的 URL 时,它以 XML 形式返回信息本地主机页面。

问题似乎是对 API 的 URL 调用尝试连接到数据库,而不是作为经过身份验证的用户(我),而是从浏览器。

如何配置 SQL Server 以允许在浏览器中对 API 进行 URL 调用以访问数据库并以 JSON/XML 形式返回数据?(例如,就像您可以使用 Twitter REST API 一样)

更新: 调试 HTTP 请求的输出:

请求网址:http://localhost:5555/api/Performance/ShowMachines

请求方法:GET

状态码:500 内部服务器错误

请求标头view source

接受:text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8

接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3

接受编码:gzip、deflate、sdch

接受语言:en-US,en;q=0.8

连接:保持活动

主机:本地主机:5555

用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11

响应标头view source

缓存控制:私有

连接:关闭

内容长度:0

日期:格林威治标准时间 2012 年 8 月 2 日星期四 16:40:11

服务器:ASP.NET开发服务器/10.0.0.0

X-AspNet-版本:4.0.30319

4

2 回答 2

2

将连接字符串更改为

<add name="PerfMonDataConnectionString" connectionString="Data Source=cloud\sqlperf,1433;Initial Catalog=PerfMonData;User=myusername;Password=mypassword providerName="System.Data.SqlClient" />

并确保无论用户帐户是什么都有权访问数据库。

这可能是也可能不是最好的方法,具体取决于您的安全要求

此外,用户/密码键不在我的脑海中,它可能是 UserId,www.connectionstrings.com是你的朋友

于 2012-08-02T01:10:58.290 回答
0

我解决了这个问题并在这里回答: C#/ASP.NET - Calling Web API operation via URL? : HTTP 错误 500

问题是,当我创建 .dbml 文件并将表拖放到其中时,自动生成的 DataContext 类创建了 EntitySet 对象来表示外键关系。我创建了带有获取沙集的简单类以返回 JSON,而不是 DataContext 中的类,不包括 EntitySet 对象。结果,它就像一个魅力。显然 EntitySets 是不可序列化的,因此给出了 500 错误。

于 2012-09-01T22:21:29.670 回答