URL重写会影响API中的数据

时间:2016-02-28 14:00:14

标签: javascript angularjs html5 iis url-rewriting

我需要为我的HTML5应用程序提供URL重写的帮助,该应用程序托管在IIS上。

在我的应用程序中,我有用于列出学校的页面。学校数据(JSON)来自C#ASP.net API。我通过使用AngularJS($ http.Get)来获取数据。

当我独自跑步时,学校页面工作正常,即没有角度路由。在我的本地IIS中包含Angular JS Routing和host之后,除了Schools页面之外,所有页面都工作得很好,这是我从API获取数据的唯一页面,

我的API网址:

http://localhost/ita_calender_api/ita/values

学校页面网址:

http://localhost:8080/Schools

(注意:我的应用程序在8080端口运行,api是默认的)

在Web.config中重写URL:

 <rewrite>
        <rules>
          <rule name="AngularJS Routes" stopProcessing="true">
            <match url=".*" />
            <conditions logicalGrouping="MatchAll">
              <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
              <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
              <add input="{REQUEST_URI}"  pattern="ITA_CALENDER_API/(.*)" negate="true" />
            </conditions>
            <action type="Rewrite" url="/" />
          </rule>
        </rules>
      </rewrite>

当我在浏览器中加载此网址时,我将学校页面作为XHR响应,状态为500

enter image description here

有一件事我忘了包括: 仅我的学校页面的CORS访问:

<location path="web/Schools.html">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Access-Control-Allow-Origin" value="http://localhost/" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
  </location>

1 个答案:

答案 0 :(得分:0)

修改 如果您只是想从/School重定向到/web/schools.html,您可以直接关注以下内容:

    [Route("~/School")]
    public ActionResult YourActionThatReturnsSchoolDotHtml()
    {
        return View();
    }

或者,你可以做一个简单的RedirectToAction

    public ActionResult YourActionThatReturnsSchoolDotHtml()
    {
        return View();
    }

    [Route("~/School")]
    public ActionResult Schools()
    {
        return RedirectToRoute(YourActionThatReturnsSchoolDotHtml());
    }

我不确定这是否会对您有所帮助,但如果您使用ASP MVC,则可以通过App_Start / RouteConfig.cs文件设置您的路线,如下所示:

routes.MapMvcAttributeRoutes();
routes.MapRoute(
    name: "Schools",
    url: "Schools/{*url}",
    defaults: new {controller = "Schools", action = "Index" }
);

然后,在SchoolsController.cs

[Route("Schools/{*url}")]
public ActionResult Index()
{
    return View();
}

如果index.cshtml目录下还有Views/Schools个文件

这基本上会将对/Schools/* MVC操作的每次调用重定向到您的angular router