【问题标题】:Generate routes using client address使用客户端地址生成路由
【发布时间】:2015-02-16 11:45:12
【问题描述】:

我们有一个 Angular 页面,它可以访问我们也在生成的宁静 Web 服务。对于网站,为了简单起见,我们使路线与 Web 服务的路线相匹配。例如,访问http://myserver.com/books/book/1/chapter/2 的网站将访问 Web 服务中的相同路由。

现在有点棘手的部分是,如果返回书籍列表,那么每本书都将包含一个指向自身的链接。

"links": [
    {
        "rel": "self",
        "href": "http://myserver.com/books/book/1"
    }]

问题是在 web api 中我们使用 Url.Link 来生成 href 值。这虽然将服务器地址作为 Web 服务而不是请求的 Angular 网站。我们希望使用这些引用在网页本身上自动生成链接。但他们显然只是直接链接回网络服务。

生成:http://myWebServiceServer.com/books/book/1 理想:http://myWebSiteServer.com/books/book/1

有没有像 Url.Link 这样的好函数可以指定正确的服务器?

【问题讨论】:

    标签: c# asp.net angularjs asp.net-web-api


    【解决方案1】:

    引用 Scott Allen 的话,“从技术上讲,您不应该在 api 控制器中使用 Url 属性来生成非 webapi 链接”。我不是生产 restful webapi 的专家,但如果返回的 url 的路由取决于调用网站的路由,这似乎不是一个好的设计。 API不应该只返回有关书籍等的信息,并让网站根据这些信息构建自己的网址。

    不管怎样,你声明你使用的 Url.Link 总是返回一个绝对 url(即http://myWebServiceServer.com/books/book/1)。

    如果你坚持要返回一个 url,你可以使用 Url.Route,它可以生成一个相对 url(即 /books/book/1)。然后,您的调用网站可以确定要添加到 url 的服务器。

    【讨论】:

    • 是的,办公室里的讨论最终得出了同样的结论。让 Web 服务了解客户端是绝对不行的。相对路径似乎提供了足够的信息。
    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2014-07-21
    • 2015-04-17
    • 1970-01-01
    • 2016-07-22
    • 2013-06-12
    • 2011-07-11
    相关资源
    最近更新 更多