Asp.net 静默地将api资源移动到另一个url
我已经用WepApi 2编写了api,它与主网站紧密结合。 我决定将它与另一个web应用程序分离,以使事情更加孤立 我遵循了这些步骤:Asp.net 静默地将api资源移动到另一个url,asp.net,http,iis,asp.net-web-api,Asp.net,Http,Iis,Asp.net Web Api,我已经用WepApi 2编写了api,它与主网站紧密结合。 我决定将它与另一个web应用程序分离,以使事情更加孤立 我遵循了这些步骤: 将所有API控制器提取到另一个项目 create属性将当前使用旧URL的所有用户重定向到新URL。出于这些原因,我之所以使用它,是因为我们应该保留用户请求的动词和请求负载 var response = request.CreateResponse(HttpStatusCode.TemporaryRedirect); //307 response.
var response = request.CreateResponse(HttpStatusCode.TemporaryRedirect); //307
response.Headers.Location = new Uri($"{appConfig.ApiAppDomain}" + "/" + request.RequestUri.AbsolutePath + request.RequestUri.Query);
return response;
位置标题中找到URL
问题就在这里:主要的web应用程序是https
,而新的api是http
。当我使用postman时,它的行为会很奇怪,并且会将POST
请求替换为GET
请求,并使用所有请求的身体切割。一点也不好,很奇怪,因为307
不允许更改方法和有效负载
以下是几个问题:
处理此https->http重定向的最佳方法是什么李>
这到底是不是一个好的解决方案李>
以静默方式将用户移动到新api url的最佳解决方案是什么
302301 etc重定向仅适用于GET请求。但是从技术上讲,对于307,浏览器可以发出POST请求。更多详细信息。但重定向不是一个好主意,它会对每个请求进行不必要的往返。此外,它可能会导致其他问题,如跨域呼叫(如果您正在进行Ajax REST API调用,浏览器将验证所有资源是否仅从https加载()
处理此https->http重定向的最佳方法是什么
我们不应该做重定向,因为它会导致许多问题,正如我在上面解释的那样
这到底是不是一个好的解决方案
在这种情况下,重定向不是一个好的解决方案
以静默方式将用户移动到新api url的最佳解决方案是什么
在我看来,在这种情况下,最好的解决方案是设置一个透明代理,该代理也可以进行https卸载。这也将使您的客户端实现零更改。下面是我们如何设置它
- 在IIS中为任何发送到API的请求设置反向代理
- 参考,以及
-一旦您阅读了上面的任何一篇文章,您将有一个如下的URL重写规则
) =>
http()
- 完全删除原始网站的API代码。包括重定向逻辑,这将使您的网站完全没有API实现
只是总结一下这种方法的优点
- 在客户端,不需要任何更改,客户端甚至不知道这样的事情正在发生。因此,客户端没有额外的往返
- 您的流量将是完整的https,在主网站之外没有https到http
- 如果主网站中有主网站和API调用,则不会创建跨域调用或混合内容警告。
4.您已将主网站与API代码完全隔离
通常,新路由是通过版本控制来实现的,比如路由或标头中的v2。但是,由于您已经创建了一个完整的新API,我认为您不应该重定向。将两者视为单独的API。但一定要向您的客户提述,旧API在某个日期之前是受支持的,然后将被关闭。顺便说一句,我会将新API“升级”到https。给你一个更新。我的主站点是https,我想重写为http。到目前为止不起作用。)你有两个不同的网站吗?或者你在IIS中创建了新的Web应用程序而不是新的网站如果它只是另一个应用程序,并且你只在同一个网站中托管,那么这种方法仍然有效。在这种情况下,你不需要代理,只需重新编写url就可以了。浏览器=>https()=>(在iis中创建的新应用程序)。因此,在这种情况下,您只需将api/products/2的url重写为newapp/api/products/2即可。这是你想要的吗?