不带参数的Http路由和路由内的一个点

时间:2018-08-31 08:14:21

标签: asp.net asp.net-web-api2

我当前正在使用ApiController类创建一个Web服务。由于某些限制,我必须在路线本身中放置一个Point(terminal.journalentry)。并将其用作基本URL。因此:

http://localhost:59684/terminal.journalentry

作为呼叫的示例。现在,尽管我遇到了问题。

当我在此调用中使用以下代码:http://localhost:59684/terminal.journalentry时,它会顺利运行。

public class JournalController : ApiController
{
        [HttpGet]
        [Route("terminal.journalentry/{id}")]
        public void WriteJournalEntry(int id)
        {

        }
}

尽管我需要使用不涉及任何参数的方法。但是当我尝试以下操作时:

public class JournalController : ApiController
{
        [HttpGet]
        [Route("terminal.journalentry")]
        public void WriteJournalEntry()
        {

        }
}

呼叫为:http://localhost:59684/terminal.journalentry 我得到:

  

HTTP错误404.0-找不到

现在我的问题是:那里出了什么问题?为了使用上面的URL而不遇到错误,需要做什么?

根据询问的内容编辑Routes.config的内容是什么

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

WebApiConfig.cs在寄存器中仅包含以下内容:config.MapHttpAttributeRoutes();

1 个答案:

答案 0 :(得分:0)

我认为您需要配置一个处理程序以忽略“ .journalentry”。
通常,任何带有句号的东西都被认为是文件,我想这是在发生这种情况。

在您API的web.config中,尝试找到以下部分:
<system.webServer>
<handlers>

并添加处理程序定义:

<add name="JournalEntryExtensionHandler" path="*.journalentry*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

您可能需要对路径通配符设置进行一些尝试。
当我之前完成此操作时,URL 结尾并带有文件名,因此路径例如是“ * .jpg”。