【问题标题】:ASP.NET MVC 4/Web API - How to configure SQL Server to allow access to API calls from a URL in browser?ASP.NET MVC 4/Web API - 如何配置 SQL Server 以允许从浏览器中的 URL 访问 API 调用?
【发布时间】:2012-08-02 00:03:43
【问题描述】:

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

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

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

为了确保这个问题不在我的应用程序端,然后我修改了 API 资源,使其获取本地数组(而不是来自数据库的信息),当我点击相同的 URL 时,它返回的信息是localhost 页面上的 XML 表单。

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

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

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

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

请求方法:GET

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

请求标头查看源代码

接受: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

Accept-Language:en-US,en;q=0.8

连接:保持活动状态

主机:本地主机:5555

User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11

响应标头查看源代码

缓存控制:私有

连接:关闭

内容长度:0

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

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

X-AspNet-版本:4.0.30319

【问题讨论】:

  • 你的数据库连接字符串是什么?
  • 我使用服务器资源管理器上的“连接到数据库”工具连接到它,然后将表拖到一个 LINQ to SQL 类中,所以实际上没有连接字符串传统的 SQL。但是,如果您不介意我问,这与调用反过来访问数据库的 API 有什么关系?例如,如果您在浏览器中输入此 URL api.twitter.com/1/users/…,您将在浏览器中以 XML 格式获取 Twitter 用户 twitterapi 和 twitter 的信息,这些信息显然是从他们的数据库中提取的。
  • Linq to SQL 设计器应该已经在您的 web.config 中设置了连接字符串。不过,得到 500 错误并没有真正的帮助。抛出了什么异常?
  • 没有抛出异常。我只是在浏览器中输入 URL,例如 localhost:5555/api/Performance/ShowMachines 请注意,当我将它访问的数据设置为应用程序中的数组而不是数据库中的数组时,这是有效的,所以它是路由没有问题。我得到 500 错误。连接字符串为:

标签: sql-server asp.net-mvc asp.net-web-api


【解决方案1】:

将连接字符串改为

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

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

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

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

【讨论】:

  • 我更改了连接字符串,我仍然连接到数据库,但我仍然遇到同样的问题。 SQL Server 需要配置为允许从 URL 调用访问 API,ASP.NET Dev Server 不允许这种事情,或者我正在处理的网络有更多的限制我想。不过谢谢。该解决方案可能会在更好的情况下修复它。
  • 我使用 Chrome 是因为 Firefox 无法正常运行。我会更新上面的问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 2014-03-14
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2018-05-27
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多